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

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

优先级(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. 与、异或、或的算法优先级不同

    • 在只含位运算的算式中,与运算优先级最高,其次是异或,最后为或。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值