开心丶 发表于 2018-1-14 13:52:18

第二章 数据类型,运算符和表达式

第三个(++i)为什么是22,不应该是8*3=24吗(这是老师给的答案)??
第二个(++i)为什么变成14了,是怎么算的?
我的想法是 (++i)+(++i)+(++i)    6+7+8=21.
求助下为什么从第二个开始变7*7,而后面的 为什么不会变了??

ba21 发表于 2018-1-14 14:18:38

1,++在后,说明结果在下一条语句生效
2,++在前,本次马上生效
3,(++j)+(++j)+(++j)运算优先级 其实是 ((++j)+(++j))+(++j)7+7+8

不同编译器可能结果不同。

orino 发表于 2018-1-14 14:34:44

本帖最后由 orino 于 2018-1-14 14:46 编辑

完整的三个表达式的实际计算应该是如下:
1.7+7+8=22
2.7+7=14
3.7+7+8+9=31

其实一个表达式不是直接就变成上面这样的1形式的,例如第三个(++i) + (++i) + (++i) + (++i), 其实是从左边开始,先算最左边第一个的加法,但加法之前 括号里面有自增,所以先算自增,也就是 先把 第一个++i和第二个++i运算好,这时i变成了7,所以式子变成了 7+7+ (++i) + (++i),也就是14+ (++i) + (++i),14是中间结果保存。 同理要计算第2个加法,把第三个 ++ i 运算完,此时,i变成8, 式子变为14+8+ (++i)=22+ (++i),接着变成 22+9=31.

orino 发表于 2018-1-14 14:26:09

前几天有相似的问题,已经作答,可以参考一下。
http://bbs.fishc.com/thread-102944-1-1.html
页: [1]
查看完整版本: 第二章 数据类型,运算符和表达式