Int数据类型的C程序的意外输出

时间:2017-08-05 04:30:38

标签: c types

任何人都可以解释为什么输出不如预期? 我期待16岁,但得到了14岁。

#include<stdio.h>

int main()
{
    int x=016;
    printf("%d",x);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

以0开头的数字文字被解释为八进制数。

  

6.4.4.1整数常数
  3 ...八进制常量由前缀0组成,可选地后跟一个数字0到7的序列。 ...

E.g 016(8 base)==&gt; 0 x 8 ^ 2 + 1 x 8 ^ 1 + 6 x 8 ^ 0 ==&gt; 0 + 8 + 6 ==&gt; 14(10个基数)

%d的{​​{1}}输出printf的值在10个基数中,因此结果为int

如果使用14输出int作为八进制数,则会获得%o

E.g

16

如果您想要包含三位数的结果,请使用int x = 016; printf("%#o", x);//016

来引导0
%d

有关格式字符串的详细信息,请参阅printf的参考。