字元字面值一般是用一對單引號來表示。char型別一般就是用字元字面值來初始化、賦值。由於char型別的是單位元組長度,當給char型別的變數用字元 字面值賦值時,當單引號裡面的內容超過乙個位元組時,系統會自動擷取乙個位元組的內容給char變數,忽略其他的位元組內容。
比如char a='1234';c++會認為單引號裡的每乙個數值都看做乙個字元字面值,也就是說1 2 3 4各佔乙個位元組,'1234'也就是一共佔4個位元組,然而char變數a只是佔乙個位元組,初始化它的值卻有4個位元組,系統要從'1234'中擷取乙個位元組 的內容給a,然而是擷取'1'給a嗎?不是,是把'4'給a。因為在x86平台(
)上,資料是以little-endian(
)的形式排列的,低位位元組放在記憶體的低位址,高位位元組放在記憶體的高位址。我們看'1234',從左到右從1到4,然而在計算機中存放的格式是從0x04到 0x01,就是說'1234'的低位4存放在計算機的記憶體低位址位,'1234'的高位1存放在記憶體的高位址位,所以當把'1234'給變數a時,系統把 記憶體中的位址中存放的4給a,其餘的全部不要了。
再如:char b='啊';由於乙個漢字是雙位元組的,系統會擷取其中乙個位元組給char,但鬼才知道擷取的那個位元組是什麼,所以cout<
當給char變數賦值正確的用asii表中的字元,比如char c='!',單引號裡面的內容是什麼,cout就會輸出什麼。
當 給char變數用乙個整形字面字初始化時,比如chard=55,這時系統會根據在asii表中這個整型值代表的控制字元是什麼,就會輸入什麼,比如在asii表中55是'7'的asii值,cout& lt;
然而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<
如 果把乙個多字元字面值給int,如inth='abc';cout<
01100011
01100010
01100001
00000000
讀取的時候跟存入的時候整好相反,先讀高位址位,然後低位址位,也就是00000000 0110000101100010 01100011 這32位代表的十進位制整型值整好是6382179。
詳細看:
C 中char和int轉換
1 整數轉化字串 sprintf 在標頭檔案 include中 語法 int sprintf string format,mixed args 返回值 字串長度 strlen 轉換字元 印出百分比符號,不轉換。c 整數轉成對應的 ascii 字元。d 整數轉成十進位。f 倍精確度數字轉成浮點數。o ...
c 中的int與char之間轉換問題
在平時的acm中很容易見到資料型別需要在數字和字元之間轉換的問題,我以乙個簡單的程式設計題來說一下這個問題。讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 在一行內輸出 n 的各位數字之...
關於int型和char型之間的轉換
我們將乙個整型變數賦值給乙個char型變數的話,就是將相應的ascii碼值的字元送入s變數 ascii碼 48 代表 0 ascii 1 代表笑臉 ascii碼 0 代表 0 於是char s 1 我們得到的將是笑臉 char s 48 我們得到 0 char s 0 我們得到 0 當我們需要得到乙...