例如,我尝试将'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个字符一起使用时,许多编码样式都禁止使用它。

07-24 09:48
查看更多