与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

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

printf()。这就是它显示结果的原因

八进制中的0100等于十进制中的64,0111等于73

so 64+73 = 137
即使是二进制数,也会得到
8+11=19
so 64+73 = 137