Re: [問題] 前置後置運算子的問題!?

看板java作者 (-858993460)時間13年前 (2010/12/13 11:29), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《st84514 (綜合水果武士)》之銘言: : int z=-1; : System.out.println(++z); : System.out.println(z--); : System.out.println(z++ + z); : System.out.println(z + z++); : 從上面程式來看輸出會為0 0 -1 0 : 小弟不懂的是第三行輸出為啥是-1?第二行輸出結束後z=-1 : 到第三行不是先把-1+-1=-2輸出後再把z+1嗎? : 那這樣最後一行輸出又怎會是0??? : 有請高手指導!謝謝! 根據 JLS 15.7.1 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7.1 那個 加 的左邊會先完全做完再做右邊 所以是 z++ (將 z 設為 0 且回傳 -1) 做完後再取右邊的 z (取得 0) 因此這個 + 做了 -1 + 0 故輸出 -1 此時 z 為 0 第四行也一樣 左邊的 z 先取完 (取得 0) 後再做右邊的 z++ (將 z 設為 1 且回傳 0) 因此這個 + 做了 0 + 0 故輸出 0 此時 z 為 1 -- 同一個問題丟去 C_and_CPP 版會有很多人跟你說很恐怖不要這樣做...XD 因為 C/C++ 的確沒有定義這種式子會怎麼算 而 Java 在上面那一節有定義了而已 不過說起來我個人依然不推薦這種寫法 徒增困擾而已 -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.92 ※ 編輯: LPH66 來自: 140.112.28.92 (12/13 11:30) ※ 編輯: LPH66 來自: 140.112.28.92 (12/13 11:31)

12/13 23:44, , 1F
很多老師會拿這個來考試喔 很酷喔
12/13 23:44, 1F

12/13 23:46, , 2F
印象中GCC和vs6 不一樣XD
12/13 23:46, 2F

12/16 11:21, , 3F
我念成Leave Programming Hell...
12/16 11:21, 3F
文章代碼(AID): #1D1PB-bw (java)
文章代碼(AID): #1D1PB-bw (java)