VC中的(++j)+(++j)+(++j)与(++j)+((++j)+(++j))

来源:百度知道 编辑:UC知道 时间:2024/05/14 18:01:18
在VC中,int j=5,p,q;
p=(++j)+(++j)+(++j);
q=(++j)+((++j)+(++j));
结果是p=22,q=24。
哪位高手给解释一下,最好详细些。
如果是( (++j) + (++j) ) + (++j)的话结果也是22,有点晕了!!!

这是我用VC6 生成的汇编代码 可以很清楚看出处理过程 第二个表达式你可以自己分析
; 12 : p=(++j)+(++j)+(++j);

mov eax, DWORD PTR _j$[ebp]
add eax, 1
mov DWORD PTR _j$[ebp], eax //这时j变为6
mov ecx, DWORD PTR _j$[ebp]
add ecx, 1
mov DWORD PTR _j$[ebp], ecx //这时j变为7
mov edx, DWORD PTR _j$[ebp]
add edx, DWORD PTR _j$[ebp] //计算j+j=14
mov eax, DWORD PTR _j$[ebp] //这时j++
add eax, 1
mov DWORD PTR _j$[ebp], eax //这时j变为8
add edx, DWORD PTR _j$[ebp]
mov DWORD PTR _p$[ebp], edx //计算14+8=22 所以结果为22

; 13 : j=5;

mov DWORD PTR _j$[ebp], 5

; 14 : q=(++j)+((++j)+(++j));

mov ecx, DWORD PTR _j$[ebp]
add ecx, 1
mov DWORD PTR _j$[ebp], ecx
mov edx, DWORD PTR _j$[ebp]
add edx, 1
mov DWORD PTR _j$[ebp], edx
mov eax, DWORD PTR _j$[ebp]
add eax, 1
mov DWORD PTR _j$[ebp], eax
mov ecx, DWORD PTR _j$[ebp]
add ecx, DWORD PTR _j$[ebp]
mov