Re: [問題] ++i + ++i + ++i

看板C_and_CPP作者 (-858993460)時間13年前 (2011/11/13 19:38), 編輯推噓14(14023)
留言37則, 15人參與, 最新討論串3/4 (看更多)
※ 引述《damnfool (該死的傻子)》之銘言: : : int x=5,y; : : y= ++x * ++x * ++x; : 6 * 6 * 6 //6可以拿來相乘,但是沒東西可以乘 : 7 * 7 * 7 //前兩個位置也就是7*7可以相乘,暫存49 : 49 * 8 //第三個位置可以拿來相乘,49*8=392,丟給y : y=392 : ++遞增運算子會加三次, : 相乘運算子的結合性,由左到右, : 第一次乘第一個,第二次乘第二個,第三次乘第三個。 我們得先知道一下 ++x 的作用包括哪些: (1) 提取 x 的值 (2) 將(1)的值加 1 (3) 將(2)的值存回 x (4) 求值, 提取 x 的值 那麼來看看這條式子下面這幾個順序吧: (A1) 提取 x 的值 | (A1) 提取 x 的值 | (A1) 提取 x 的值 (A2) 將(A1)的值加 1 | (A2) 將(A1)的值加 1 | (A2) 將(A1)的值加 1 (A3) 將(A2)的值存回 x | (A3) 將(A2)的值存回 x | (A3) 將(A2)的值存回 x (B1) 提取 x 的值 | (B1) 提取 x 的值 | (A4) 求值, 提取 x 的值 (B2) 將(B1)的值加 1 | (B2) 將(B1)的值加 1 | (B1) 提取 x 的值 (B3) 將(B2)的值存回 x | (B3) 將(B2)的值存回 x | (B2) 將(B1)的值加 1 (C1) 提取 x 的值 | (A4) 求值, 提取 x 的值 | (B3) 將(B2)的值存回 x (C2) 將(C1)的值加 1 | (B4) 求值, 提取 x 的值 | (B4) 求值, 提取 x 的值 (C3) 將(C2)的值存回 x | (D1) 計算(A4)*(B4) | (D1) 計算(A4)*(B4) (A4) 求值, 提取 x 的值 | (C1) 提取 x 的值 | (C1) 提取 x 的值 (B4) 求值, 提取 x 的值 | (C2) 將(C1)的值加 1 | (C2) 將(C1)的值加 1 (D1) 計算(A4)*(B4) | (C3) 將(C2)的值存回 x | (C3) 將(C2)的值存回 x (C4) 求值, 提取 x 的值 | (C4) 求值, 提取 x 的值 | (C4) 求值, 提取 x 的值 (D2) 計算(D1)*(C4) | (D2) 計算(D1)*(C4) | (D2) 計算(D1)*(C4) ↓ ↓ ↓ 結果:512 結果:392 結果:336 很湊巧的,這三個結果都是實際會出現的結果: 512 是我的 VC 2005 給的答案 392 是我的 gcc 4.1.0 給的答案 336 則是 Java 給的答案... C/C++ 在這裡並沒有規定要採取上述三種 (以及其他不知道多少種) 順序中的哪一個 因此出現什麼結果都不能意外 (嚴格講起來這句話把 undefined 和 implementation defined 扯在一起講了 不過反正我們只要知道它不一定會照我們想要的去做就是) 相對的, Java 有規定在這個時候一定要採取上面最右邊那種順序 (也就是運算子的一邊要完全算完才會進入另一邊) 但這依然不會抹滅它是一個差勁透頂的程式寫作方式就是了 ========================= (以下是壞學生示範) 這樣的話碰到這種老師我可能會這樣講 「我下載了最新的 Java,然後把這個程式用 Java 寫,執行後卻得到 336 耶」 「難道是 Java 錯了嗎?」 「既然大家都做錯了,那我們寫程式就不要寫這種大家都會做錯的寫法好了」 「那麼這個考題就送分好了,因為大家都做錯了」 ...嘛如果對方是拉不下臉被羞辱的人的話我的下場就會很慘了 (yay) -- 実琴:「河野!你真的就這樣被物質慾望給吸引過去了嗎?!」 亨:「只要穿著女裝擺出親切的樣子,所有必要花費就能全免,似乎一點都不壞啊。」 実琴:「難道你沒有男人的尊嚴了嗎?!」 亨:(斷然道)「沒有。在節衣縮食生活吃緊學生面前,沒有那種東西。」 --プリンセス・プリンセス 第二話 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.62

11/14 03:40, , 1F
yay lph66 大大萬歲
11/14 03:40, 1F

11/14 03:40, , 2F
XDD
11/14 03:40, 2F

11/14 03:40, , 3F
我剛剛一直在等你po打臉..
11/14 03:40, 3F
※ 編輯: LPH66 來自: 140.112.230.62 (11/14 03:45)

11/14 04:32, , 4F
推推推 :)
11/14 04:32, 4F

11/14 05:47, , 5F
臉拉不下來活該......
11/14 05:47, 5F

11/14 05:49, , 6F
這個問題本來就不適合當程式設計第一堂課的作業
11/14 05:49, 6F

11/14 06:06, , 7F
臉拉不下來就吃全班的拳頭,LPH66幫我傳福音一下
11/14 06:06, 7F

11/14 06:09, , 8F
Oracle會買Java好像有點道理
11/14 06:09, 8F

11/14 08:01, , 9F
大大認真了...
11/14 08:01, 9F

11/14 08:54, , 10F
倒也不只給LPH66看的而已,所有的在學學生都可以參考
11/14 08:54, 10F

11/14 11:49, , 11F
我覺得這個題目,可能到我進棺材.還是會有教授出此題
11/14 11:49, 11F

11/14 11:51, , 12F
而且在台灣的企業環境下,這種戲碼也常上演.重點就是
11/14 11:51, 12F

11/14 11:51, , 13F
認真就輸掉了
11/14 11:51, 13F

11/14 14:00, , 14F
推 認真就輸掉了~ :P
11/14 14:00, 14F

11/14 14:43, , 15F
L大,您認真了XD
11/14 14:43, 15F

11/14 15:17, , 16F
L 大的回文都很詳細,很好看XD
11/14 15:17, 16F

11/14 16:44, , 17F
我是說跟教授認真.因為有些教授聽不進去人話的
11/14 16:44, 17F

11/14 16:45, , 18F
有些教授是很能納言. 這是真的要看人.
11/14 16:45, 18F

11/14 16:45, , 19F
我用我的腦袋直覺就是6*7*8.........= =
11/14 16:45, 19F

11/14 16:46, , 20F
教授的答案就是答案,拿到學分就可以說再見了 (無誤)
11/14 16:46, 20F

11/14 16:52, , 21F
我們教授會說:我們來打賭,用CODE RUN ANSWER出來
11/14 16:52, 21F

11/14 16:52, , 22F
你的答案對的話就直接讓你過,錯的話就直接當掉XDDDDD
11/14 16:52, 22F

11/14 20:50, , 23F
L大讚啦
11/14 20:50, 23F

11/14 22:49, , 24F
讚XD
11/14 22:49, 24F

11/15 00:35, , 25F
台灣的教育體系中,教程式的很多可能連程式怎麼寫都不曉得
11/15 00:35, 25F

11/15 00:51, , 26F
其實我可以接受,教授應該要研究一些比寫程式更重要的事
11/15 00:51, 26F

11/15 00:52, , 27F
但這樣的話,也不知道有誰可以來教程式了...
11/15 00:52, 27F

11/15 01:00, , 28F
推james大,教學的工作一向由james大擔任不是嗎? ^^
11/15 01:00, 28F

11/15 01:03, , 29F
如果有大學願意聘我去教程式,我會很樂意哈哈
11/15 01:03, 29F

11/15 01:03, , 30F
不過我的個性不會是個受學生歡迎的老師
11/15 01:03, 30F

11/15 02:21, , 31F
怎麼會呢? 我覺得超哥人很好阿!又帥又強XD
11/15 02:21, 31F

11/15 02:46, , 32F
樓上亂說 XD
11/15 02:46, 32F

11/15 08:18, , 33F
認真的男人最帥,因為james一值很認真.故得証.james最帥
11/15 08:18, 33F

11/15 12:59, , 34F
.........我覺得最近還挺不認真的啊
11/15 12:59, 34F

11/15 13:18, , 35F
你最近很不帥,得證(疑疑
11/15 13:18, 35F

11/15 13:19, , 36F
..........樓上 orz
11/15 13:19, 36F

11/16 09:59, , 37F
真的被呼喚出來了 L大 good job
11/16 09:59, 37F
文章代碼(AID): #1Em1oVzU (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
2
7
完整討論串 (本文為第 3 之 4 篇):
問題
5
48
問題
14
37
問題
2
7
問題
16
65
文章代碼(AID): #1Em1oVzU (C_and_CPP)