int x=5;求(++x)+(++x)+(++x),请解释一下,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/02 22:24:08
int x=5;(++x)为6,明白
int x=5;求(++x)+(++x)为14,不明白,为什么呢?
int x=5;求(++x)+(++x)+(++x)为22,也不明白。

谢谢指点!!!

-_-!

这种自增运算跟编译系统直接有关,我用Dev-C++得到跟你一样的结果,但用Turbo C编译得到的第三个结果是24

用Turbo C得到的结果我能解释,但我实在不能解释22从哪里来。

说一下我的理解:(++X)+(++X)是先执行两次自增才进行()+(),三个括号的同理

这种写法,运行的结果跟编译器相关。
从C++标准上说,是不正确的。
谈谈(++x)+(++x)
如果,你想让x自增两次,输出为14,可以改为++x;++x;y=x+x;
如果,你想让x自增两次,输出为12,可以改为++x;y=x+x;++x;
如果,你想让x自增两次,输出为13,可以改为++x;y=x+x+1;++x;
……
方法有很多。

编译器把算式转换成逆波兰式再交由CPU进行运算,不同编译器处理方式不同,所以结果不同

(++x)+(++x) 被编译成逆波兰式(++x)(++x)+ 然后CPU计算过程:
1.计算两次++x,x=7
2.原式=>77+
3.计算77+=>14

(++x)+(++x)+(++x)可以从左开始编译成(++x)(++x)+(++x)+
运算时按上面 原式=>14(++x)+ (此时x=7)=>14 8 + => 22

也可以从右面开始编译成(++x) (++x)(++x)+ +,运算时,先三次++x,原式=>8 8 8 + + =>8 16 + => 24

《Effective C++》里有这方面的讨论

用tc 2.0好些,答案有冲突!

赞成;六楼的
用VC 6.0 编译答案和你的一样

拿分的!谢谢,不要骂我!没有人答就给我,再谢谢~