如下代碼複製自https://blog.csdn.net/qq_30366449/article/details/77938870,是爲了本身之後查看方便才複製過來的,謝謝原博主。c++
字符字面值通常是用一對單引號來表示。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(http://baike.baidu.com/view/2368412.htm)的形式排列的,低位字節放在內存的低地址,高位字節放在內存的高地址。咱們看'1234',從左到右從1到4,然而在計算機中存放的格式是從0x04到 0x01,就是說'1234'的低位4存放在計算機的內存低地址位,'1234'的高位1存放在內存的高地址位,因此當把'1234'給變量a時,系統把內存中的地址中存放的4給a,其他的所有不要了。
再如:char b='啊';因爲一個漢字是雙字節的,系統會截取其中一個字節給char,但鬼才知道截取的那個字節是什麼,因此cout<<b時會出現亂碼。
當給char變量賦值正確的用ASII表中的字符,好比char c='!',單引號裏面的內容是什麼,cout就會輸出什麼。
當 給char變量用一個整形字面字初始化時,好比chard=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,如inth='abc';cout<<h;的結果是6382179。這個就須要好好解釋下了,首先'a'的ASCII值是97,內存中佔一個字節8位,就是01100001,b是01100010,c是01100011。因爲int是32位的,不夠的位用0補齊,在存入內存時,a是高位因此存到高地址位,c是低位因此存到低地址位,四個字節從低地址到高地址依次是
01100011
01100010
01100001
00000000spa
讀取的時候跟存入的時候整好相反,先讀高地址位,而後低地址位,也就是00000000 0110000101100010 01100011,這32位表明的十進制整型值整好是6382179。 .net