2

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

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

‎#include <stdio.h>

int main()
{
    int binary1,binary2;

    binary1 = 0100;
    binary2 = 0111;

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

    return 0:
}
4

5 回答 5

9

这些不是二进制数,而是八进制数(以 8 为基数):

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

printf("%d \n", binary1 + binary2); // = 64 + 73 = 137
于 2012-07-15T19:17:39.153 回答
6

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

  • %d: 十进制 => 137
  • %o: 八进制 => 211

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

于 2012-07-15T19:23:10.453 回答
3

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

于 2012-07-15T19:19:05.747 回答
1

这两个数字都是八进制数,并以 8 为基数相加。

于 2012-07-15T19:18:02.377 回答
1

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

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

so 64+73 = 137
于 2012-07-15T19:25:28.690 回答