69,380
社区成员
发帖
与我相关
我的任务
分享
此时:i=6;没意见吧?
继续:
6: int b=(++i)+(++i)+(++i);
00401056 mov ecx,dword ptr [ebp-4]
00401059 add ecx,1
0040105C mov dword ptr [ebp-4],ecx
上面是计算++i;
i=7;
0040105F mov edx,dword ptr [ebp-4]
00401062 add edx,1
00401065 mov dword ptr [ebp-4],edx
上面是计算++i;
i=8;
00401068 mov eax,dword ptr [ebp-4]
0040106B add eax,dword ptr [ebp-4]
i+i = 8+8 = 16
0040106E mov ecx,dword ptr [ebp-4]
00401071 add ecx,1
00401074 mov dword ptr [ebp-4],ecx
上面是计算++i;
i= 9
00401077 add eax,dword ptr [ebp-4]
16+9 = 25
4: int i=3;
00401028 mov dword ptr [ebp-4],3
5: int a=(i++)+(i++)+(i++);
0040102F mov eax,dword ptr [ebp-4]
00401032 add eax,dword ptr [ebp-4]
00401035 add eax,dword ptr [ebp-4]
00401038 mov dword ptr [ebp-8],eax
0040103B mov ecx,dword ptr [ebp-4]
0040103E add ecx,1
00401041 mov dword ptr [ebp-4],ecx
00401044 mov edx,dword ptr [ebp-4]
00401047 add edx,1
0040104A mov dword ptr [ebp-4],edx
0040104D mov eax,dword ptr [ebp-4]
00401050 add eax,1
00401053 mov dword ptr [ebp-4],eax
6: int b=(++i)+(++i)+(++i);
00401056 mov ecx,dword ptr [ebp-4]
00401059 add ecx,1
0040105C mov dword ptr [ebp-4],ecx
上面是计算++i;
0040105F mov edx,dword ptr [ebp-4]
00401062 add edx,1
00401065 mov dword ptr [ebp-4],edx
上面是计算++i;
00401068 mov eax,dword ptr [ebp-4]
0040106B add eax,dword ptr [ebp-4]
i+i
0040106E mov ecx,dword ptr [ebp-4]
00401071 add ecx,1
00401074 mov dword ptr [ebp-4],ecx
上面是计算++i;
00401077 add eax,dword ptr [ebp-4]
再+i
0040107A mov dword ptr [ebp-0Ch],eax
主要讲:
b=(++i)+(++i)+(++i);
//首先,++6=7,然后,++7=8 为什么这样呢?因为++的优先级比()要高,由于i保存最后一次的取值,所以:
//应该为8+8=16(注意:这时编译器就要算出结果来的)。最后,16+(++8)=16+9=25。
//就是这样的,楼主明白了么?!呵呵