看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
purincess:yay lph66 大大萬歲 11/14 03:40
purincess:XDD 11/14 03:40
purincess:我剛剛一直在等你po打臉.. 11/14 03:40
※ 編輯: LPH66 來自: 140.112.230.62 (11/14 03:45)
tropical72:推推推 :) 11/14 04:32
damnfool:臉拉不下來活該...... 11/14 05:47
damnfool:這個問題本來就不適合當程式設計第一堂課的作業 11/14 05:49
damnfool:臉拉不下來就吃全班的拳頭,LPH66幫我傳福音一下 11/14 06:06
damnfool:Oracle會買Java好像有點道理 11/14 06:09
diabloevagto:大大認真了... 11/14 08:01
damnfool:倒也不只給LPH66看的而已,所有的在學學生都可以參考 11/14 08:54
angleevil:我覺得這個題目,可能到我進棺材.還是會有教授出此題 11/14 11:49
angleevil:而且在台灣的企業環境下,這種戲碼也常上演.重點就是 11/14 11:51
angleevil:認真就輸掉了 11/14 11:51
windincloud:推 認真就輸掉了~ :P 11/14 14:00
xatier:L大,您認真了XD 11/14 14:43
cutecpu: L 大的回文都很詳細,很好看XD 11/14 15:17
angleevil:我是說跟教授認真.因為有些教授聽不進去人話的 11/14 16:44
angleevil:有些教授是很能納言. 這是真的要看人. 11/14 16:45
jason12308:我用我的腦袋直覺就是6*7*8.........= = 11/14 16:45
james732:教授的答案就是答案,拿到學分就可以說再見了 (無誤) 11/14 16:46
jason12308:我們教授會說:我們來打賭,用CODE RUN ANSWER出來 11/14 16:52
jason12308:你的答案對的話就直接讓你過,錯的話就直接當掉XDDDDD 11/14 16:52
tomap41017:L大讚啦 11/14 20:50
VictorTom:讚XD 11/14 22:49
kikiqqp:台灣的教育體系中,教程式的很多可能連程式怎麼寫都不曉得 11/15 00:35
james732:其實我可以接受,教授應該要研究一些比寫程式更重要的事 11/15 00:51
james732:但這樣的話,也不知道有誰可以來教程式了... 11/15 00:52
tropical72:推james大,教學的工作一向由james大擔任不是嗎? ^^ 11/15 01:00
james732:如果有大學願意聘我去教程式,我會很樂意哈哈 11/15 01:03
james732:不過我的個性不會是個受學生歡迎的老師 11/15 01:03
xatier:怎麼會呢? 我覺得超哥人很好阿!又帥又強XD 11/15 02:21
james732:樓上亂說 XD 11/15 02:46
angleevil:認真的男人最帥,因為james一值很認真.故得証.james最帥 11/15 08:18
james732:.........我覺得最近還挺不認真的啊 11/15 12:59
chrisQQ:你最近很不帥,得證(疑疑 11/15 13:18
james732:..........樓上 orz 11/15 13:19
leonjye:真的被呼喚出來了 L大 good job 11/16 09:59