[問題] C++運算元和運算子的基礎問題

看板PLT (程式語言與理論)作者 (身藏唐演詩集就是死罪)時間15年前 (2009/12/19 13:28), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
題目如下: 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

12/19 14:06, , 1F
這種問題在C_and_CPP版已經被討論很多次了.. 你可以去看看
12/19 14:06, 1F

12/19 18:05, , 2F
大概是計算單元(暫存器)狀態彼此換掉吧,本來x++必須發生作用
12/19 18:05, 2F

12/19 18:06, , 3F
但在x++的++生效之後,*=的效果接著發生了.而*=認可的x值是
12/19 18:06, 3F

12/19 18:07, , 4F
++生效之前的x值,所以x=3;x*=x++得到9. 注意,這不是絕對答案
12/19 18:07, 4F

12/19 19:21, , 5F
簡單地說就是這種寫法本來就容易(或說會)有不同結果
12/19 19:21, 5F

12/19 19:21, , 6F
這叫實作定義,不同 compiler, optimization 選項都會不同
12/19 19:21, 6F

01/21 01:09, , 7F
就跟F兄講的一樣!看看別人的解答!好好想想執行原理!
01/21 01:09, 7F
文章代碼(AID): #1BB6IH3h (PLT)
文章代碼(AID): #1BB6IH3h (PLT)