任何人都可以解释为什么输出不如预期? 我期待16岁,但得到了14岁。
#include<stdio.h>
int main()
{
int x=016;
printf("%d",x);
return 0;
}
答案 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的参考。