Re: [問題] 幾個簡單卻又複雜的題目

看板java作者 (Alien)時間14年前 (2011/11/22 22:56), 編輯推噓4(401)
留言5則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《honyihon (lantis)》之銘言: : 標題: [問題] 幾個簡單卻又複雜的題目 : 時間: Tue Nov 22 00:38:43 2011 : : int x=3,y=3,z=3; : z+=++x*y++; : 這題由程式跑出的 結果 x y z 的值分別為 4 4 15 : 可是正常我們分析 ++x 為4 y++為4 程式應該變成 z+=4*4 ,也就是 z=z+4*4 z的值依照 : 這個思路應該是 3+4*4 也就是 19 ,哪邊思路出現問題? : --------------------------------------------------- 去看看prefix & postfix ++ 和 -- operator 的分別。 問題出在你理解 y++ 的地方 int i = 0; int j = 1; i = j++; 與 i = ++j; 的分別你搞得懂嗎? : int a=3,b=4,c=5; : a+=b*++c; : 跑出來的結果 a,b,c 分別為 27 , 4 ,6 : 要怎樣改一個運算子才能使答案變成 23 , 4 ,6 : 各位是怎樣想的...... : -------------------------------------- 這是謎題嗎? 雖然我覺得這種題目沒什麼營養,不過你搞懂上面的 部份,這部份就不難了 : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 111.253.112.9 : → awert:y++在當下是3 11/22 00:42 : → bera:改成a+=b*c++ 我是這樣想 11/22 01:38 : → comeonbaby:樓上++好像放錯位了? 這就是典型的++x和x++的差別問題 11/22 01:43 : → comeonbaby:誤會b大了 以為第一題 sor orz... 11/22 01:45 : → bera:第1題1樓已經說明囉, 我的記法是y++的++在後面, 是後面才動作 11/22 01:59 : → bera:所以3先指派給y 然後去做z+=++x*y++運算 算完後 再做++(加1) 11/22 02:02 : 推 MephistoH:++在後面就是最後做 11/22 09:35 最後兩位都解錯了 首先 MephistoH 肯定錯得過份,operator precedence 根本 就有定義,postfix ++ 是不是最後做 (最低 precedence) 去找找書就知道了,不要誤導別人。 bera 說的是一般人 (寫了很久程式的人也一樣)的謬誤。 一天到晚都聽到 i++ 是什麼先算完再 ++ ,和上面說一樣, precedence 早有定義。 postfix ++ 或 -- 的意思 不是 先做完計算再 ++/--, 而是 increment/decrement 後,evaluate 為 increment/decrement 的值。 比如 i = j++; 不該理解為:先 i = j, 然後再 ++ ++ operator 的 precedence 比 = 為高,不可能比 = 還晚跑。 應該理解為 j 先 increment 但同時存起了一份 increment 前的值,用以 evaluate 該 expression. 所以會把 increment 前的值 assign 給 i Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 183.179.61.91 ※ 編輯: adrianshum 來自: 183.179.61.91 (11/22 22:56) ※ 編輯: adrianshum 來自: 183.179.61.91 (11/22 22:56)

11/22 23:08, , 1F
推這篇,我居然看懂了QQ,感恩~
11/22 23:08, 1F

11/23 00:05, , 2F
感謝^^" 又長知識了
11/23 00:05, 2F

11/23 08:25, , 3F
11/23 08:25, 3F

11/24 14:10, , 4F
我也看懂了耶
11/24 14:10, 4F

11/24 22:56, , 5F
太好了!!謝謝~
11/24 22:56, 5F
文章代碼(AID): #1EoxWKOU (java)
文章代碼(AID): #1EoxWKOU (java)