如题,这两种表示方法有什么区别。都在什么情况下使用
业精于勤,荒于嬉;行成于思,毁于随。
'0x20' 是一個 multi-character character constant 它對應的值是0x30783230
(注: '0' 'x' '2' 的 ascii 码分别是 0x30 0x78 0x32)
'x20' 是一個 char 它的值是0x20
(注: '\x[0-9a-fA-F]{1,2}' 用16进制表示一个char 比如 '\xFF' '\[0-7]{1,3}' 用8进制表示一个char 比如 '0' )
$ cat 1.c
#include <stdio.h> int main() { int a = '0x20'; int b = '\x20'; printf("a = 0x%x\n", a); printf("b = 0x%x\n", b); return 0; }
$ gcc -Wall 1.c
1.c:4:11: warning: multi-character character constant [-Wmultichar] int a = '0x20'; ^
$ ./a.out
a = 0x30783230 b = 0x20
你可以認為'0x2d'是語法錯誤,'x2d'才是正確的寫法。
具體說'0x2d'不是一個char,而是一個int,它的值是0x30783264或0x64327830,具體是哪個要看實現。
C標準這麼說:
3.1.3.4 Character Constants Semantics An integer charcter constant has type int [note that it has type char in C++]...The value of an integer character constant containing more than one character...is implementation-defined.
注意它提到了在C++裡這個東西的type是char,據我所知至少VC支援這麼寫:'xe5xadx97',這是一個UTF-8編碼的"字"。
'xe5xadx97'
'x2d' 主要是用來表是一個不能直接顯示的單字元的編碼
'0x2d' 應該算是一個標準的16進位表示的字串,可以透過int('0x2d', 16) 轉換為int 類型的值
'0x2d'是包含4個字元的字串吧, 'x2d'表示字元'-'(其ASCII數值為0x2d=45)。
'0x20' 是一個 multi-character character constant 它對應的值是0x30783230
'x20' 是一個 char 它的值是0x20
$ cat 1.c
$ gcc -Wall 1.c
$ ./a.out
你可以認為'0x2d'是語法錯誤,'x2d'才是正確的寫法。
具體說'0x2d'不是一個char,而是一個int,它的值是0x30783264或0x64327830,具體是哪個要看實現。
C標準這麼說:
注意它提到了在C++裡這個東西的type是char,據我所知至少VC支援這麼寫:
'xe5xadx97'
,這是一個UTF-8編碼的"字"。'x2d' 主要是用來表是一個不能直接顯示的單字元的編碼
'0x2d' 應該算是一個標準的16進位表示的字串,可以透過int('0x2d', 16) 轉換為int 類型的值
'0x2d'是包含4個字元的字串吧, 'x2d'表示字元'-'(其ASCII數值為0x2d=45)。