C/CPP运算优先级的坑

1. 位运算优先级低于逻辑运算符

做leetcode时遇到的,判断一个数某一比特位是否为0。

if ( val & 2 == 0) {
	// do someting...
}

万万没想到&运算符的优先级是低于==的,debug了好久,得加上括号。

1.1 验证

#include <iostream>
int main( int argc, char *argv[]){


    int val = 2;

    if ( val & 1 == 0) {
        std::cout << "without (): bit 1 is 0" << std::endl;
    }
    else {
        std::cout << "without (): bit 1 is 1" << std::endl;
    }

    if ( (val & 1) == 0) {
        std::cout << "with (): bit 1 is 0" << std::endl;
    }
    else {
        std::cout << "with (): bit 1 is 0" << std::endl;
    }

    return 0;
}

输出结果为

without (): bit 1 is 1
with (): bit 1 is 0

2. 移位运算符优先级低于算术运算符

这是在写二分的时候遇到的, l + (r-l) >> 1 的值永远为r >> 1

应该写作l + (r - l >> 2)

2.1 验证

#include <iostream>




int main( int argc, char *argv[]){


    int l = 2, r = 8;

    int mid = l + (r - l) >> 1;
    int mid2 = l + ( r - l >> 1);
    std::cout << "mid: " << mid << std::endl;
    std::cout << "mid2: " << mid2 << std::endl;

    return 0;
}



输出结果为

mid: 4
mid2: 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值