※ 引述《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