|
发表于 2014-8-21 10:55:30
|
显示全部楼层
i++,编译器是先将i的值放到一个寄存器里面,然后计算的结果给p,寄存器再执行++过程,
++j是先把前两个++算出来然后再得知和后面的算
5: int i=5,j=5,p=0,q=0;
00401028 mov dword ptr [ebp-4],5
0040102F mov dword ptr [ebp-8],5
00401036 mov dword ptr [ebp-0Ch],0
0040103D mov dword ptr [ebp-10h],0
6: p=(i++)+(i++)+(i++);
00401044 mov eax,dword ptr [ebp-4]
00401047 add eax,dword ptr [ebp-4]
0040104A add eax,dword ptr [ebp-4]
0040104D mov dword ptr [ebp-0Ch],eax
00401050 mov ecx,dword ptr [ebp-4]
00401053 add ecx,1
00401056 mov dword ptr [ebp-4],ecx
00401059 mov edx,dword ptr [ebp-4]
0040105C add edx,1
0040105F mov dword ptr [ebp-4],edx
00401062 mov eax,dword ptr [ebp-4]
00401065 add eax,1
00401068 mov dword ptr [ebp-4],eax
7: q=(++j)+(++j)+(++j);
0040106B mov ecx,dword ptr [ebp-8]
0040106E add ecx,1
00401071 mov dword ptr [ebp-8],ecx
00401074 mov edx,dword ptr [ebp-8]
00401077 add edx,1
0040107A mov dword ptr [ebp-8],edx
0040107D mov eax,dword ptr [ebp-8]
00401080 add eax,dword ptr [ebp-8]
00401083 mov ecx,dword ptr [ebp-8]
00401086 add ecx,1
00401089 mov dword ptr [ebp-8],ecx
0040108C add eax,dword ptr [ebp-8]
0040108F mov dword ptr [ebp-10h],eax
你要学会看反汇编
这个问题是编译器的问题,不同机器运行结果可能不一样,这个问题没有必要深究
在编写程序的时候一般不要去用i++和++i的区别就是不要把他们写在一个含多个表达式的运算表达式里面
可移植性不强,只把他作为一条语句使用就行 |
|