自增运算

编写程序中,遇到一个++操作的问题,感觉很有意思
主要代码很简单,是这样的:
int a=0,b;
b=(++a)+(++a)+(++a);
printf("%d\n",b);
按照我刚开始的想法,最后结果应该输出的是6,但是实际输出结果是7,于是就反汇编了一下。
下面是Debug版本反汇编的代码:
6:        int a=0,b;
0040D748   mov         dword ptr [ebp-4],0
7:        b=(++a)+(++a)+(++a);
0040D74F   mov         eax,dword ptr [ebp-4]
0040D752   add         eax,1
0040D755   mov         dword ptr [ebp-4],eax
0040D758   mov         ecx,dword ptr [ebp-4]
0040D75B   add         ecx,1
0040D75E   mov         dword ptr [ebp-4],ecx
0040D761   mov         edx,dword ptr [ebp-4];先对参与运算的变量a做自增运算
0040D764   add         edx,dword ptr [ebp-4];计算(++a)+(++a)的值存放在edx中
0040D767   mov         eax,dword ptr [ebp-4];开始第三次自加操作
0040D76A   add         eax,1
0040D76D   mov         dword ptr [ebp-4],eax
0040D770   add         edx,dword ptr [ebp-4];将前面加法操作的临时值和自增后的变量a相加
0040D773   mov         dword ptr [ebp-8],edx;将结果赋给变量b
8:        printf("%d\n",b);
0040D776   mov         ecx,dword ptr [ebp-8]
0040D779   push        ecx
0040D77A   push        offset string "%d\n" (0042201c)
0040D77F   call        printf (004010a0)
0040D784   add         esp,8
容易出现误解地方是:先入为主的思想,先进行自增操作,然后进行加法操作;则参与运算的三个数为1,2,3,得出错误结果6。实际计算过程中,加法操作是一步步进行的,即先对前两个数进行相加,存放到临时变量里,然后和后面的第三个数进行相加,最终得到正确答案7.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值