此代码的输出为56。
//输出:56
#include <stdio.h>
int main() {
char c = '\08';
printf("%d",c);
return 0;
}
答案 0 :(得分:6)
正如@stark所评论的那样,您的常数由2个字节“ \ 0”和“ 8”组成。存储在变量c
中时,它们被截断为'8'。
在ASCII Character Chart中,您可以看到ASCII中的8是56,这是因为您使用%d
格式说明符进行打印的:
如果您注意自己的警告,您可能会发现自己:
main.c:4:14: warning: multi-character character constant [-Wmultichar]
4 | char c = '\08';
|
此外,我建议您尝试这样打印:
printf("%c", c);
,然后输出将是:
8
向您显示变量c
中实际存储的内容。
提示:如果您使用char c = '\01';
或char c = '\07';
以及两者之间的任何内容,您将看到无警告以及正在打印的相应数字,因为这些是有效的八位数字,正如@Gerhardh的答案所提到的。
答案 1 :(得分:4)
在C字符串或字符文字中,可以转义十六进制或八进制值。
前缀'\0'
用于八进制值,而'\x'
用于十六进制值。
这意味着'\0'
等于0,'\011'
等于9等等。
在您的情况下,'8'
后跟无效的八进制数字。因此,转义序列在此处停止,并且您的文字与值0相同,后跟字符'8'
。
现在,您的字符文字包含多个字符。这是一个多字节字符文字,该文字的值是实现的依赖。
在您的情况下,字符的最终值是最后一个字符的值,例如'8'
,其ascii值为0x38
或56
。
将其打印为十进制数字时,您会得到56
。
答案 2 :(得分:0)
将值“ 8”作为字符。在ASCII中,其值为56。基本上,char仅包含1个字符