|
发表于 2012-3-29 17:47:36
|
显示全部楼层
本帖最后由 莫名其妙 于 2012-3-29 19:00 编辑
还好你这是分开的 要是那种printf("++ -- -- ++")这种一堆一起的我还真不敢回答
#include <stdio.h>
void main()
{
int i = 8;
printf("%d\n",++i); //++i 先加然后将值输出 这里i=9
printf("%d\n",--i); //--i 接上面的值i=9 先减运算i-1 然后输出值 这里i=8
printf("%d\n",i++); //i++ 接上面的值i=8 先输出结果i=8 再进行运算i+1 这里i=9
printf("%d\n",i--); //i-- 接上面的值i=9 先输出结果i=9 再进行运算i-1 这里i=8
printf("%d\n",-i++);//-i++ 接上面的值i=8 先进行负号运算 i=-8 然后输出结果 i=-8 然后在i+1 这里i=9
printf("%d\n",-i--);//-i-- 接上面的值i=9 先进行负号运算 i=-9 然后输出结果 i=-9 然后在i-1 这里i=8
}
反编译的显示
6: printf("%d\n",++i);
0040102F mov eax,dword ptr [ebp-4]
00401032 add eax,1 i 先进行增加
00401035 mov dword ptr [ebp-4],eax 将结果赋值给i
00401038 mov ecx,dword ptr [ebp-4]
0040103B push ecx
0040103C push offset string "%d\n" (0042001c)
00401041 call printf (00401140) 输出 i 的值 i=9
00401046 add esp,8
7: printf("%d\n",--i);
00401049 mov edx,dword ptr [ebp-4] 接上面的值
0040104C sub edx,1 先 i-1
0040104F mov dword ptr [ebp-4],edx 值在存给i
00401052 mov eax,dword ptr [ebp-4]
00401055 push eax
00401056 push offset string "%d\n" (0042001c)
0040105B call printf (00401140) 输出i的值 i=8
00401060 add esp,8
8: printf("%d\n",i++);// 在接上面的值
00401063 mov ecx,dword ptr [ebp-4] 接上面的值
00401066 mov dword ptr [ebp-8],ecx
00401069 mov edx,dword ptr [ebp-8]
0040106C push edx 保存i=8
0040106D push offset string "%d\n" (0042001c) 先输出 i的值 这里i=8
00401072 mov eax,dword ptr [ebp-4]
00401075 add eax,1 这里算i+1
00401078 mov dword ptr [ebp-4],eax 将值存进i
0040107B call printf (00401140)
00401080 add esp,8 这里执行完后i=9
9: printf("%d\n",i--); //接上面i的值
00401083 mov ecx,dword ptr [ebp-4] 接上面的i=9
00401086 mov dword ptr [ebp-0Ch],ecx
00401089 mov edx,dword ptr [ebp-0Ch]
0040108C push edx
0040108D push offset string "%d\n" (0042001c) 这里先输出结果 i=9
00401092 mov eax,dword ptr [ebp-4]
00401095 sub eax,1 这里计算i-1
00401098 mov dword ptr [ebp-4],eax
0040109B call printf (00401140)
004010A0 add esp,8 执行完 i=8
10: printf("%d\n",-i++);
004010A3 mov ecx,dword ptr [ebp-4] 接上面i=8
004010A6 neg ecx 这里先进行负号运算 这里i=-8
004010A8 mov dword ptr [ebp-10h],ecx
004010AB mov edx,dword ptr [ebp-10h]
004010AE push edx 这里将i=-8保存
004010AF push offset string "%d\n" (0042001c) 这里先输出 i=-8
004010B4 mov eax,dword ptr [ebp-4]
004010B7 add eax,1 这里对执行的是 i=8 然后 i+1
004010BA mov dword ptr [ebp-4],eax 这里i=9
004010BD call printf (00401140)
004010C2 add esp,8
11: printf("%d\n",-i--);
004010C5 mov ecx,dword ptr [ebp-4] 接上面的值 i=9
004010C8 neg ecx 这里进行负号运算 i=-9
004010CA mov dword ptr [ebp-14h],ecx
004010CD mov edx,dword ptr [ebp-14h]
004010D0 push edx
004010D1 push offset string "%d\n" (0042001c) 这里先输出 i=-9
004010D6 mov eax,dword ptr [ebp-4] 这里对i=9 进行 i-1
004010D9 sub eax,1
004010DC mov dword ptr [ebp-4],eax 最后的结果i=8
004010DF call printf (00401140)
004010E4 add esp,8
|
|