我编写了以下代码,期望它输出211
,但是当我编译并运行它时,我看到137
。
有人可以解释一下发生了什么吗?感谢。
#include <stdio.h>
int main()
{
int binary1,binary2;
binary1 = 0100;
binary2 = 0111;
printf("%d\n", binary1 + binary2);
return 0:
}
答案 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