前置和后置运算符
这是迅雷一问一答的题目:
反汇编过程:
不贴ASM代码了
-----------------------------------
首先有一点必须要明确的是:表达式的运算顺序是从左到右的
语句 a = a++ + a++; 的执行过程是:
1. 第一个 a++ 的结果是5,第二个 a++ 的结果也是5
2. 此时表达式的结果是 a = 5 + 5 = 10,然后 a 再执行 2 个自加
语句 b = (++a) + (a++) + (a++) + (++a) + (++a) + (a--); 的执行过程是:
1. 第一个 ++a 的结果是6
2. 两个 a++ 的结果都是6
3. 前一个 ++a 的结果是7,后一个 ++a 的结果是8
4. a-- 的结果是8
最后表达式的结果是 b = 6+6+6+7+8+8 = 41,接下来就是更新 a 的值了,a一共有2次后置自加,1次后置自减,所以a = a + 2 -1 = 9(因为前置运算在表达式运算时已经运算过,而到表达式运算结束时a的值是8)