例如,我尝试将'13'
设置为('3' + '1' << 3)
,但无法正常工作。
我的意思不是"0123"
,而是'0123'
。它可以编译,但是我不知道编译器在打印时如何获得八进制结果6014231063。我不是在寻找atoi
,只是将其转换为当前数字。例如,int x = '1'
将以十进制数字系统显示49。现在,我对打印int x = '0123'
感兴趣。该任务来自编程竞赛,因此答案不应该是意外行为。
int main(void) {
int x = '0123';
printf("%o\n", x);
printf("%d\n", x >> 24);
printf("%d\n", x << 8 >> 24);
printf("%d\n", x & 0xff);
return 0;
}
最佳答案
'0123'
中的int
。
int x = '0123';
'0123'
是字符常量。在C语言中,这是常量的一种形式,其类型为int
。很少使用它,因为它的值是实现定义的。通常取决于尾音和字符编码(例如ASCII),如下所示:(('0'*256 + '1')*256 + `2`)*256 + '3' = 858927408 = 0x33323130
(('3'*256 + '2')*256 + `1`)*256 + '0' = 808530483 = 0x30313233
此外:用它编写有用的可移植代码是一个挑战。与超过1个字符一起使用时,许多编码样式都禁止使用它。