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

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

在编写函数,获取一个数的二进制表示中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。

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

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

相关文章
|
7月前
如何判断一个数是不是NAN
如何判断一个数是不是NAN
77 0
让用户输入x的值,如果x的值如果小于1,y=x,x如果大于等于1并且小于10,y=2x。。。 // x x < 1 // y={ 2X 1<=x
让用户输入x的值,如果x的值如果小于1,y=x,x如果大于等于1并且小于10,y=2x。。。 // x x < 1 // y={ 2X 1<=x
输入一个整数,判断大于0小于0还是等于0
输入一个整数,判断大于0小于0还是等于0
|
5月前
|
SQL
条件构造器,MybatisPlus支持各种复杂的where条件,其实就是Wrapper,eq是等于的意思,相当于等于那个数值,ne就是不等于,gt大于的意思,ge大于等于,QueryWrapper是做
条件构造器,MybatisPlus支持各种复杂的where条件,其实就是Wrapper,eq是等于的意思,相当于等于那个数值,ne就是不等于,gt大于的意思,ge大于等于,QueryWrapper是做
|
1月前
使用函数判断Armstrong 数
【10月更文挑战第24天】使用函数判断Armstrong 数。
21 7
|
7月前
|
存储 前端开发 JavaScript
为什么0.1 + 0.2 不等于 0.3 ?
这篇编程技术文章探讨了为什么在多种编程语言中,0.1 + 0.2 不等于 0.3 的现象。问题源于计算机使用二进制浮点数表示小数,而二进制无法精确表示某些十进制分数,如 0.1 和 0.2。这导致它们在计算机内部被近似表示,从而在相加时产生微小误差。文章通过示例和图片解释了二进制浮点数的表示原理,并提供了将小数转换为整数再相加以及使用 `toFixed()` 方法或 decimal.js 库等解决精度问题的方法。
|
Go
怎样判断一个数是否为偶数
怎样判断一个数是否为偶数
110 0
|
Python
判断一个数能否同时被4和5整除
判断一个数能否同时被4和5整除
85 0
|
算法
判断一个数是否能被3或5整除
判断一个数是否能被3或5整除
164 0
变量等于0时的判断问题
变量等于0时的判断问题
84 0