作者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