C++中char和int型變量的一點心得
字符字面值一般是用一對單引號來表示。char類型一般就是用字符字面值來初始化、賦值。由于char類型的是單字節長度,當給char類型的變量用字符字面值賦值時,當單引號里面的內容超過一個字節時,系統會自動截取一個字節的內容給char變量,忽略其他的字節內容。比如char a='1234';c++會認為單引號里的每一個數值都看做一個字符字面值,也就是說1 2 3 4各占一個字節,'1234'也就是一共占4個字節,然而char變量a只是占一個字節,初始化它的值卻有4個字節,系統要從'1234'中截取一個字節的內容給a,然而是截取'1'給a嗎?不是,是把'4'給a。因為在x86平臺(http://baike.baidu.com/view/339142.htm)上,數據是以little-endian(再如:char b='啊';由于一個漢字是雙字節的,系統會截取其中一個字節給char,但鬼才知道截取的那個字節是什么,所以cout<<b時會出現亂碼。
當給char變量賦值正確的用ASII表中的字符,比如char c='!',單引號里面的內容是什么,cout就會輸出什么。
當給char變量用一個整形字面字初始化時,比如char d=55,這時系統會根據在ASII表中這個整型值代表的控制字符是什么,就會輸入什么,比如在ASii表中55是'7'的ASII值,cout<<d;的結果就是7。char對應ascii值如果是可顯示字符就可以輸出來,如果是不可顯示字符,就輸不出來.就好像0x0D和0x0A它們分別表于回車符和換行符,但是在它們本身沒有一個形狀能表示這些字符得,就沒辦法顯示出來了.
然而ASCII表中只有0到127這128種,如果當大于127的整數甚至是大于255給char時,系統的運行結果未知。
字符串字面值,也就是雙引號來定義的,一般稱作為c風格字符串,他的類型應該是char*,所以char e="t";是會發生編譯錯誤的。
對于int變量,int f=10;自然是正確的,這不用多解釋了。然而如果把一個字符字面值給int,如int g='a',會把字符a在ASCII表中的ASCII值(也就是97)給a,cout<<g;的結果就是97。
如果把一個多字符字面值給int,如int h='abc';cout<<h;的結果是6382179。這個就需要好好解釋下了,首先'a'的ASCII值是97,內存中占一個字節8位,就是01100001,b是01100010,c是01100011。由于int是32位的,不夠的位用0補齊,在存入內存時,a是高位所以存到高地址位,c是低位所以存到低地址位,四個字節從低地址到高地址依次是
01100011
01100010
01100001
00000000
讀取的時候跟存入的時候整好相反,先讀高地址位,然后低地址位,也就是00000000 01100001 01100010 01100011 這32位代表的十進制整型值整好是6382179。
以上有不少內容是我從CSDN論壇上各種高人回復的貼子里總結的,在此感謝他們。