论坛: 编程破解 标题: 同一个式子为何有不同的结果? 复制本贴地址    
作者: sniper167 [sniper167]    论坛用户   登录
x=3
(x++)+(x++)+(++x)+(++x)=?
turrboc里运行确实=20。
我是这样认为的:
x=3
(x++)+(x++)+(++x)+(++x)
先计算括号里的,x++是先调用x,再加,++x是先加,再调用x。
1.第一个(x++)执行后等于3,
2.第二个(x++)同上,
经过两次自加后x=5了;
3.第三个(++x)执行相当于(++5),等于6,从此以后x=6了
4.第四个(++x)执行相当于(++6),等于7
合起来就是 3+3+7+7=20


可是在visual c++里确是=15。
我是这样想的:
x=3
(x++)+(x++)+(++x)+(++x)
先计算括号里的,x++是先调用x,再加,++x是先加,再调用x。
1.第一个(x++)执行后等于3,
2.第二个(x++)同上,
3.第三个(++x)执行相当于(++3),等于4,从此以后x=4了
4.第四个(++x)执行相当于(++4),等于5
合起来就是 3+3+4+5=15
why?不知我的想法对不对,请指教
谁能讲一下?
谢谢

地主 发表时间: 04-01-08 15:43

回复: 286 [unique]   版主   登录
如果不同编译器对同样语句生成不同结果是很正常的事,不要奇怪。比如TC的int是两个字节,而VC的int是四个字节。
不过,我劝你不要在这种让人费解的问题过多停留,而应把重点放在类、继承、消息机制、API的调用、控件的使用上。



B1层 发表时间: 04-01-08 17:22

回复: yingzike [yingzike]   论坛用户   登录
也在那个了吧,++A和A++不必要太深入的,知道有这么一回事就对
尽量关注其他方面比这些重要的多的东西
同意楼上的建议


B2层 发表时间: 04-01-08 17:51

回复: sniper167 [sniper167]   论坛用户   登录
那请问一下286在vc++中我的那种想法对不?

B3层 发表时间: 04-01-08 18:09

回复: yingzike [yingzike]   论坛用户   登录
x=3
(x++)+(x++)+(++x)+(++x)=?

TC2.0编译器对此的解释是对于等式是从右到左算的
那么按我的理解应当是:
第一步: 最右边 (++X) X=4
第二步: 最右边前一个(++X) X=5
第三步: 最右边前二个(X++) X=5  (X先等于5,等等式算完后再自加)
第四步: 最左边的(++X) X=6 了,(上面算完后,自加了)

不知道对不对,因为很久不玩这个了,加加自加的问题,所以错了,大家勿笑


B4层 发表时间: 04-01-08 18:17

回复: sniper167 [sniper167]   论坛用户   登录
不管对于不对
都感谢各位的回复

B5层 发表时间: 04-01-08 18:25

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号