作者adrianshum (Alien)
看板java
标题Re: [问题] 几个简单却又复杂的题目
时间Tue Nov 22 22:56:18 2011
※ 引述《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)
1F:推 Kreen:推这篇,我居然看懂了QQ,感恩~ 11/22 23:08
2F:→ bera:感谢^^" 又长知识了 11/23 00:05
3F:推 MichaelKay:推 11/23 08:25
4F:推 kikipp:我也看懂了耶 11/24 14:10
5F:推 a7236172:太好了!!谢谢~ 11/24 22:56