我写了下面的代码,期望它输出211
,但是当我编译并运行它时,我看到了137
。
有人可以解释发生了什么吗?谢谢。
#include <stdio.h>
int main()
{
int binary1,binary2;
binary1 = 0100;
binary2 = 0111;
printf("%d\n", binary1 + binary2);
return 0:
}
这些不是二进制数,而是八进制数(以 8 为基数):
binary1 = 0100; // = 64
binary2 = 0111; // = 64 + 8 + 1 = 73
printf("%d \n", binary1 + binary2); // = 64 + 73 = 137
因为%d
以十进制打印出数字。如果要打印八进制数,则需要使用%o
,这将打印出211。
%d
: 十进制 => 137%o
: 八进制 => 211printf()
不知道你用八进制定义了数字。
0100 和 0111 中的前导零表示这些数字将被解释为八进制数。八进制的 100 是十进制的 64,八进制的 111 是十进制的 73。
这两个数字都是八进制数,并以 8 为基数相加。
在 C 中,以“0”为前缀的数字文字是八进制(以 8 为基数)。这就是为什么它显示结果 137
八进制的 0100 相当于十进制的 64,而 0111 相当于 73,
so 64+73 = 137