与C语言中的文字、算术混淆
我编写了下面的代码,希望它能输出与C语言中的文字、算术混淆,c,literals,C,Literals,我编写了下面的代码,希望它能输出211,但是当我编译并运行它时,我看到了137 有人能解释一下发生了什么事吗?谢谢 #include <stdio.h> int main() { int binary1,binary2; binary1 = 0100; binary2 = 0111; printf("%d\n", binary1 + binary2); return 0: } #包括 int main() { int二进制1,二进
211
,但是当我编译并运行它时,我看到了137
有人能解释一下发生了什么事吗?谢谢
#include <stdio.h>
int main()
{
int binary1,binary2;
binary1 = 0100;
binary2 = 0111;
printf("%d\n", binary1 + binary2);
return 0:
}
#包括
int main()
{
int二进制1,二进制2;
binary1=0100;
binary2=0111;
printf(“%d\n”,二进制1+二进制2);
返回0:
}
这些不是二进制数,而是(以8为基数):
这两个数字都是八进制的,将它们加在基数8中。0100和0111中的前导零表示这些数字将被解释为八进制数。八进制中的100表示十进制中的64,八进制中的111表示十进制中的73。因为
%d
以十进制打印数字。如果要打印八进制数,则需要使用%o
,这将打印出211
:十进制=>137%d
:八进制=>211%o
printf()。这就是它显示结果的原因
八进制中的0100等于十进制中的64,0111等于73
so 64+73 = 137
即使是二进制数,也会得到8+11=19
。
so 64+73 = 137