运算符优先级,不等于,||,++

通过汇编代码深入理解运算符优先级

环境为 visual studio 2019 community

#include <iostream>
using namespace std;

int main()
{
    int a = 2, b = 0;
    if (a || b++)
    {
        cout << b;
    }
}

这是一个很常见的判断语句,其中判断条件 a||b++ 等价于 a!=0 || b++!=0 ,两种写法汇编代码完全相同

002E1D26 83 7D F8 00          cmp         dword ptr [a],0  
002E1D2A 75 3A                jne         main+76h (02E1D66h)  
002E1D2C 8B 45 EC             mov         eax,dword ptr [b]  
002E1D2F 89 85 28 FF FF FF    mov         dword ptr [ebp-0D8h],eax  
002E1D35 8B 4D EC             mov         ecx,dword ptr [b]  
002E1D38 83 C1 01             add         ecx,1  
002E1D3B 89 4D EC             mov         dword ptr [b],ecx  
002E1D3E 83 BD 28 FF FF FF 00 cmp         dword ptr [ebp-0D8h],0  
002E1D45 74 0C                je          main+63h (02E1D53h)  
002E1D47 C7 85 24 FF FF FF 01 00 00 00 mov         dword ptr [ebp-0DCh],1  
002E1D51 EB 0A                jmp         main+6Dh (02E1D5Dh)  
002E1D53 C7 85 24 FF FF FF 00 00 00 00 mov         dword ptr [ebp-0DCh],0  
002E1D5D 83 BD 24 FF FF FF 00 cmp         dword ptr [ebp-0DCh],0  
002E1D64 74 19                je          main+8Fh (02E1D7Fh)  

!=和||的优先级比较容易理解,++和!=可以看到具体的运算过程是:先将b中的值存放到eax中,再将eax中的值存放到ebp-0D8h中,再将b 的值存放到ecx中,将ecx增1,再将ecx存放到b中,完成b++,之后用前面保存到ebp-0D8h中的b的初始值进行比较并跳。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值