精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《oohay (五黑)》之銘言: : ※ 引述《fishforpt (游來游去的)》之銘言: : : 而重點也就落在對Java來說 是否也同樣 : : System.out.println(z++ + z); : : 假設他是將整個運算域做完運算再給值print : : 那麼第三行就變成 : : z=z+1 + -1 : : 結果也將一如所示print -1 出來 : : 但這樣的算法不就等同於 (++z + z)嗎? : : 而很明顯似乎並不是這麼運算的 : : 從第一行的++z與第二行的z-- : : 得知java的postfix operators 也是在結束segment才做運算 : : 因此假設便失敗了 : : 到底java的第三行.........發生了什麼事........... : : 結果我還是沒有理解......... : 不是,是Java的程式跟C不一樣之處, : 它規定程式執行時,第一條規則是取值是由左邊運算元先取值, : 第二條規則是複合運算式需先將子運算式(運算元)求解取值,才進行本身的計算. : 當它處理 z++ + z 之前,必須先把二個sub-expression算完. : 因此左項 z++ 先算,右項 z 也取值,這二項完成之後,再算加法. : 雖然這樣寫 z++ 與 ++z 看起來一樣,但就語言規格來說,看起來蠻穩的, : 複合運算式不會有模稜兩可的執行順序. : 當然,跟C的意思不一樣啦. 大大我一個小問題喔 如你所說在Java這樣的規則下 就是第三行的z++ 先算 z同時取值 所以後面的z還是取原先的數值 而不是+1後的z值對嗎? 不同於 C的即是 在PRINT("%d",z++ + z)下 C不會先把 z++ 先算而是直接拿原來的z值下去做z + z的動作 而在結束segment後才將z+1 這樣理解應該就沒錯了對吧!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.84.10