【问题标题】:Unable to understand result of this c program [duplicate]无法理解这个c程序的结果[重复]
【发布时间】:2014-01-21 22:32:36
【问题描述】:
#include<stdio.h>
void main(){
  int i;
  i = 011;
  printf("%d",i);
}

这个程序给出的输出为 9。我不知道这是什么原因。请帮我弄清楚为什么这个程序会给出这个输出。

【问题讨论】:

  • 你知道如何在C 中表示八进制数吗?
  • 八进制常量字面量011
  • 0b011 可以被 GCC 使用。

标签: c binary


【解决方案1】:

在 C 中,您可以通过以下方式表示值 9:

  • 十六进制(以 16 为基数):0x9
  • 十进制(以 10 为底):9
  • 八进制(以 8 为底):011

【讨论】:

  • 我们也可以使用大写 X 表示十六进制,例如0XFF
【解决方案2】:

在 C/C++/Java 中,十六进制数字以 0x 开头。八进制数以0 开头。

0119 的八进制数

【讨论】:

  • 在你问为什么之前,请阅读this
【解决方案3】:

011 是八进制数,因为它前面有 0

011 = 1*(8^1) + 1*(8^0)
    = 1*8 + 1*1
    = 8 +1
    = 9 in decimal(%d)

0x 表示十六进制,只有数字(即 9)表示十进制

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 2013-06-17
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多