当显示变量“int a = 011”的值时,我得到9.为什么?

使用此代码段:

int a = 011; printf("a = %d", a); 

结果如何?

a = 9

011是八进制值,其十进制等效值为9.前面的整数字面值为0表示八进制值。
使用printf %o说明符以八进制forms打印值。

int literal或int常量中的前导0表示八进制值。 它被称为八进制常量。

相关: C11标准,第6.4.4.1章, 整数常数 ,第3段,

八进制常量由前缀0组成,可选地后跟一个数字07的序列。

如果数字文字的开头为0 ,则指定八进制系统。 并且八进制系统中的111*8 + 1 = 9