按位与逻辑运算符顺序表及注意事项

本文探讨了位运算符的优先级和结合方向,指出在使用按位与进行条件判断时可能产生的误解。举例说明了如何通过正确的运算顺序避免逻辑错误,提到了左移和右移运算符的优先级高于加减法但低于位运算,并提醒开发者在涉及位运算的算法中使用括号和中间变量以确保控制运算顺序。此外,还强调了与、异或、或运算的优先级差异,建议在位运算密集的代码中注意这些细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按位与逻辑运算符顺序表及注意事项

优先级(1表示最高,逐渐递减,相同优先级则看结合方向)运算符含义结合方向
2!逻辑非右到左
2~按位取反右到左
5<<左移左到右
5>>右移左到右
6> | >= | < | <=大于| 大于等于|小于|小于等于左到右
7== | !=等于| 不等于左到右
8&按位与左到右
9^按位异或左到右
10|按位或左到右

针对这个表,我想说几点:

  1. 在平时写if语句时,经常容易出现按位与条件判断的错误

    a = 1;
    b = 2;
    if(a & b)
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    

    这段代码的运算是:

    • 计算a&b=1&2=0
    • 输出"No"
    a = 1;
    b = 2;
    if(a & b != 0)
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    

    根据优先级表计算

    • b != 0为真,返回1
    • a & 1 = 1为真,输出"Yes"

    结果大相径庭!

    因此,在实现位运算有关的算法问题时,应该多注意这样的运算顺序所导致的非算法问题。多使用中间变量,多用括号,确保每一次运算都在你的掌控之内。

  2. 左移右移的运算符优先级在位运算中较高,但仍比加减法低。如:

    • 希望对a进行乘2加1的操作,

    • a = 1<<h + 1;会先执行加法运算,再执行位运算,和预想有出入;

    • a = 1<<h | 1;将加法替换为与运算就没有这个问题了。

  3. 与、异或、或的算法优先级不同

    • 在只含位运算的算式中,与运算优先级最高,其次是异或,最后为或。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值