谁可以给我详细解释一下
int x=1,y;
y=++x*++x;
和
y=++x*++x*++x;
y的值各是多少 为什么是这个值??
[解决办法]
int x=1,y; //初始化,此时x=1, y未知
y=++x*++x; //首先,++x,此时x=2,然后再++x,此时x=3,然后x * x = 9, y = 9
和
y=++x*++x*++x; //同上,这个是27
之所以这样计算的原因是,++的优先级要比*的优先级高,所以先算++,后算乘法
[解决办法]
y=++x*++x; //首先,++x,此时x=2,然后再++x,此时x=3,然后x * x = 9, y = 9
和
y=++x*++x*++x; //同上,这个是27
我写的答案是指这两条都是单独的与
int x = 1, y;
组合哦,可不是三条语句连在一起的结果!
[解决办法]
看编译器
[解决办法]
9 ++运算优先级最高,进行2次x从1变为3,再进行乘法运算,取出x的值都为3
216 类似上面,x=3进行3次++运算,x变为6,然后取值相乘,得到216
[解决办法]
没什么意义。
编译器不同,答案自然不同!
[解决办法]
the answer isnt unique due to the compiler!
[解决办法]
这里主要是一个优先级的问题,1楼已经说的很明白了,
对于编译器来说,*比++优先级小,所以x的值每次都要先加之后再进行*运算
所以
y=++x*++x;
和
y=++x*++x*++x;
分别的值是9和27
[解决办法]
把别人弄糊涂的程序员是可耻的
把自己弄糊涂的程序员是可怜的
这种代码没有研究的必要,只要研究它就是走错了,这是很多人都说过很多遍的
只要你不写出这样的代码就可以了
注意:结果是编译器相关的,所以sjwlong的答案也是错误的,答案就是没有答案,不同编译器结果不一样
[解决办法]
同意楼上
但是一楼的不敢苟同
按一楼所说那么y=++x*++x*++x;
应为64
[解决办法]
注意:结果是编译器相关的,所以sjwlong的答案也是错误的,答案就是没有答案,不同编译器结果不一样
经典