不要写如下类型的代码: n=(++i)+(++i);
n=(++i)+(++i)+(++i);
看看汇编就知道为什么了:
n=(++i)+(++i);的汇编 (i=5) :
00401090 mov ecx,dword ptr [ebp-8]
00401093 add ecx,1
00401096 mov dword ptr [ebp-8],ecx 完成 i 自加1
00401099 mov edx,dword ptr [ebp-8] 结果放入edx
0040109C add edx,1
0040109F mov dword ptr [ebp-8],edx 完成第二次 i 自加1
004010A2 mov eax,dword ptr [ebp-8] 1 结果放入eax
004010A5 add eax,dword ptr [ebp-8] 2 eax <-- eax+i
004010A8 mov dword ptr [ebp-4],eax 3
看看最后3行代码:1-->把 i 的值放入寄存器eax,
2-->把 i 的值和eax相加,这就是相当于 i + i 了
3-->把eax的结果放入n中
|