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

时间:2015-01-06 21:10:41

标签: c binary

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

x是:9

不应该是十进制的3吗?

2 个答案:

答案 0 :(得分:4)

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

Octal 011 -> Decimal 9

只能指定十进制,八进制和十六进制表示,对于十进制表示,它是直接的,对于八进制表示,您在值前加0,因此09无效,并且对于十六进制表示,您在值前加0x

注意:由 abligh 评论,您可以将0b前缀与gccclang以及其他编译器一起使用

答案 1 :(得分:0)

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

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