为什么'\ 0101'不等于65位小数?

问题描述 投票:3回答:1

考虑此C程序:

unsigned char c2 = '\0101';
printf("%c, %d\n", c2, c2);

我相信输出应该是:A 65,但实际输出是1 49

原因:0作为字符常量的前缀以八进制格式声明,八进制值为101,则值为65。然后对应于65的ASCII值为A。有人可以告诉我我要去哪里了吗?我尝试使用与'\ x41'相同的十六进制代码,它给出了所需的输出。

c output
1个回答
4
投票

八进制格式的字符的转义序列是一个反斜杠,后跟最多三位数字,这意味着最后一位数字不属于转义序列的一部分。所以'\0101'实际上是一个多字节字符常量:第一个是\010,它是值8,后跟字符'1'

前导0用于指定数字八进制常量,而不是character八进制常量,因此在这种情况下您不需要前导0:

unsigned char c2 = '\101';

如果您确实想使用数字八进制常量,则可以这样做:

unsigned char c2 = 0101;
© www.soinside.com 2019 - 2024. All rights reserved.