与文字的混淆,C中的算术

use*_*523 2 c literals

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

有人可以解释一下发生了什么吗?谢谢.

?#include <stdio.h>

int main()
{
    int binary1,binary2;

    binary1 = 0100;
    binary2 = 0111;

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

    return 0:
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

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

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

printf("%d \n", binary1 + binary2); // = 64 + 73 = 137
Run Code Online (Sandbox Code Playgroud)


ibl*_*lue 6

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

  • %d:decimal => 137
  • %o:octal => 211

printf() 不知道你在八进制中定义了数字.