与文字的混淆,C中的算术

时间:2012-07-15 19:15:15

标签: c literals

我编写了以下代码,期望它输出211,但是当我编译并运行它时,我看到137

有人可以解释一下发生了什么吗?感谢。

‎#include <stdio.h>

int main()
{
    int binary1,binary2;

    binary1 = 0100;
    binary2 = 0111;

    printf("%d\n", binary1 + binary2);

    return 0:
}

5 个答案:

答案 0 :(得分:9)

这些不是二进制数,而是octal(基数8):

binary1 = 0100; // = 64
binary2 = 0111; // = 64 + 8 + 1 = 73

printf("%d \n", binary1 + binary2); // = 64 + 73 = 137

答案 1 :(得分:6)

因为%d打印出十进制数字。如果要打印八进制数字,则需要使用%o,这将打印 211

  • %d:decimal =&gt; 137
  • %o:octal =&gt; 211

printf()不知道你在八进制中定义了数字。

答案 2 :(得分:3)

0100和0111中的前导零表示数字将被解释为八进制数。八进制的100是十进制的64,八进制的111是十进制的73。

答案 3 :(得分:1)

这两个数字都是八进制数,并将它们添加到基数为8。

答案 4 :(得分:1)

在C中,前缀为'0'的数字文字是八进制(基数为8)。这就是为什么它显示结果137

0100八进制相当于十进制64,0111就相当于73,

so 64+73 = 137