作者oohay (五黑)
看板C_and_CPP
標題Re: [問題] 面試遇到的一個問題
時間Sat Feb 2 04:39:51 2008
※ 引述《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的意思不一樣啦.
--
→ 鄉民A:灌C可以搞阿嬌啊?
推 鄉民B:我的Visual C++光碟哪裏去了?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.228.219
※ 編輯: oohay 來自: 59.112.228.219 (02/02 04:42)
推 fishforpt:哇喔~~我有原來如此的感覺吶....感謝大大指導 02/02 18:34