为什么这个 printf 在 C 中打印出错误的数字表示形式?

why does this printf print out wrong representation of the number in C?

int n = 00000011;
printf("n is: %d\n", n);

x is: 9

十进制不应该是3吗?

000000119的八进制值,不能直接用二进制表示。

Octal 011 -> Decimal 9

只能指定十进制、八进制和十六进制表示,对于十进制表示,它很简单,对于八进制表示,您在值前加上 0 前缀,因此 09 无效,对于十六进制表示,您在值前加上 0x.

注意:正如 abligh 所评论的,您可以将 0b 前缀与 gccclang 可能还有其他编译器。

在 c 中,以 0*digit* 开头的数字文字是 base-8。 对于二进制文件,一些编译器允许您以 0b 开头。 否则你必须手动将它们转换为十六进制或八进制。

#include <stdio.h>
int main(void){
    int n=0b00000011;
    printf ("n is %d\n",n);
    return 0;
};