作者lp19fox (身藏唐演诗集就是死罪)
看板PLT
标题[问题] C++运算元和运算子的基础问题
时间Sat Dec 19 13:28:46 2009
题目如下:
Please determine the final value of varible after all statement are performed.
x=y=z=3;
x*=x++;
y+=++x-x++;
z=x++*++y;
书上的解法:
x*=x++; => x=x*x;x=x+1;
y+=++x-x++; => x=x+1; y=y+(x-x); x=x+1;
z=x++*++y; => y=y+1; z=x*y; x=x+1;
答案:x=13,y=4,z=48
但是..我用DEV-C++实际跑一次
答案却是x=12,y=4,z=44
我仔细看了一下
实作里面 x=3;x*=x++; 执行结果x=9
如果改成 x=y=3; y*=x++; 执行结果x=4,y=9
好混乱阿 为什麽前者没做x++ 後者有
劳烦各位高手教一下这到底怎麽回事??
还有 最上面那题的答案到底应该是??
拜托各位大大了 感激不尽!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.114.251.158
1F:推 FRAXIS:这种问题在C_and_CPP版已经被讨论很多次了.. 你可以去看看 12/19 14:06
2F:→ yauhh:大概是计算单元(暂存器)状态彼此换掉吧,本来x++必须发生作用 12/19 18:05
3F:→ yauhh:但在x++的++生效之後,*=的效果接着发生了.而*=认可的x值是 12/19 18:06
4F:→ yauhh:++生效之前的x值,所以x=3;x*=x++得到9. 注意,这不是绝对答案 12/19 18:07
5F:→ godfat:简单地说就是这种写法本来就容易(或说会)有不同结果 12/19 19:21
6F:→ godfat:这叫实作定义,不同 compiler, optimization 选项都会不同 12/19 19:21
7F:推 mysterise:就跟F兄讲的一样!看看别人的解答!好好想想执行原理! 01/21 01:09