我知道’ 0’的ASCII值是0,而ASCII值0是0x30,但是当我尝试使用printf打印它们的ASCII值时,我得到相同的输出:
printf("'\0' : %dn", ' '); printf("'\0' in hex : %xn", ' '); printf("0 : %dn", 0); printf("0 in hex: %xn", 0);
输出:
' ' : 0 ' ' in hex : 0 0 : 0 0 in hex: 0
为什么?
ASCII字符'0'
与数字0
不同。 您在第二对printf
中打印整数0
而不是'0'
。
试试这个:
printf("'\0' : %dn", ' '); printf("'\0' in hex : %xn", ' '); printf("'0' : %dn", '0'); printf("'0' in hex: %xn", '0');
此外,您不需要转义'
内部字符串。 也就是说, "'"
很好,你不需要写"'"
你混淆0,’ 0’和’0’。
前两个是相同的; 它们只表示值为0的int
。
但是,’0’是不同的,并且表示具有’0’字符值的int
,即48
。
是的,字符文字' '
值为0
,这与字符集无关。
(K&R2,2.3)“字符常量’ 0’表示值为零的字符,空字符。’ 0’经常被写入而不是0来强调某些表达式的字符性质,但数值只是0 “。
‘ 0’的ASCII值确实为0.但’ 0’与’0’不同(注意反斜杠,它是转义符号)。
printf("0 : %dn", '0');
像这样打印,你会得到48。
你的最后一行应该是
printf("0 in hex: %xn", '0');
所有这些答案似乎都错过了