C语言里的问题!

来源:百度知道 编辑:UC知道 时间:2024/06/04 06:51:43
main()
{int m=011,n=11;
printf("%d,%d\n",++m,n++);
}
输出结果: 10,11
为什么011==9?
011等于9?这是为什么.

m = 011;
以0开头, 声明为八进制数,所以011就代表十进制数的8
以0x开头,声明为十六进制数。

同时,++m, 若递增号放在变量名的前面,表示先递增变量,再将改变后的变量值作为参数传递。
反之,n++, 将递增号放在变量名的后面,表示先传递变量当前值,传输之后,再递增变量。

也就说是,(以十进制表示)m为8,n为11。 在执行printf语句时,先递增m,为8+1=9,将9作为参数传输。 与此同时,n为11,由于递增号在后面,所以先传输n的当前值,即为11,传输完毕后再递增n,即为12,但此时printf已经执行完毕,所以屏幕上显示的n值是递增以前的数值。

分析:

程序在定义int类型的m,n时
给m,n赋初值
m=011,表示以八进制表示的数
n=11,是以十进制表示的数

而在输出函数printf("%d,%d\n",++m,n++);中
%d表示以十进制整数输出
所以要将以八进制表示的数转换为十进制数
八进制的整数11转换为十进制的整数是9
所以输出为 10,11

注意: ++m与n++的区别

相关知识:八进制整数以0开头,而十六进制以0x或0X开头,如:024,0x65

在C里 以0开头的被视为八进制,0x开头为十六进制,上面的m八进制的11=十进制的9。不懂翻翻书。

0开头的数字式代表8进制的,八进制数011就是十进制数9

很简单
int m=011 是八进制的C表示法!