Re: [問題] 幾個簡單卻又複雜的題目
※ 引述《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
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
討論串 (同標題文章)