VC-运算符的优先级问题

问题来源:一位学生问  int i=4 ; int j=++i + ++i + ++i ; 执行后j为多少?为什么?

答案是  19 !!!!(VC6.0环境)

以下是机器码的汇编格式

/*
3:        int i = 4 ;
4:        int j = ++i + ++i + ++i ;
执行分析:dword ptr [ebp-4] 保存的就是 i             dx 是 j
          
---- 计算第一个 ++i 保存  
0040102F   mov         eax,dword ptr [ebp-4]    //eax = dword ptr [ebp-4]  即 eax = i
00401032   add         eax,1                        //eax = eax + 1
00401035   mov         dword ptr [ebp-4],eax        //dword ptr [ebp-4]= eax   即  i = eax
========此时 i = 5  =====

=--- 计算第二个 ++i 保存
00401038   mov         ecx,dword ptr [ebp-4]
0040103B   add         ecx,1
0040103E   mov         dword ptr [ebp-4],ecx
========此时 i = 6  =====

--------- 计算第一个 + 号
00401041   mov         edx,dword ptr [ebp-4]
00401044   add         edx,dword ptr [ebp-4]
========此时   edx = 12 =====

=--- 计算第三个 ++i 保存
00401047   mov         eax,dword ptr [ebp-4]
0040104A   add         eax,1
0040104D   mov         dword ptr [ebp-4],eax
========此时 i = 7  =====

--------- 计算第二个 + 号
00401050   add         edx,dword ptr [ebp-4]
00401053   mov         dword ptr [ebp-8],edx
=========== 结果是19 =================

*/
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值