位与运算&小于相等判断==的优先级

在编写函数,获取一个数的二进制表示中1的数量时,如果采用左移后与最高位为1的数,进行位与运算。那么运算符的优先级需要特别注意。

完整函数如下,其中0x80000000表示32位整数中最高位为1的数,二进制表示为1000 0000 0000 0000 0000 0000 0000 0000

int getNumOf1InBin1(int n)
{
    int cnt = 0;
    while (n != 0){
        if ((n & 0x80000000) == 0x80000000) //与运算需要加括号
            cnt++;
        n <<= 1;
    }
    return cnt;
}

如果写成

if (n & 0x80000000 == 0x80000000) 

则先判断 两个负数是否相等,当然是相等的,结果为1,n再与1进行与运算。显然,这里的逻辑不是我们想要的。因此,需要加括号,先做与运算,将非最高位置为0,再判断最高位是否为1。

当然该功能还有更好的办法,暂且不表。

优先级有疑问可参考下表。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值