移位和屏蔽二进制位

问题描述

我在书中碰到了这段代码片段:

    public static short countBits(int x) {
        short numBit =  0;
        while(x != 0) {
            numBit +=  (x&1);
            x >>>= 1;
        }
        return numBit;
    }

但是,我不确定numBit += (x&1);x >>>= 1的工作方式。
我认为numBit += (x&1)正在将AND与一位数字和1进行比较。这是否意味着如果我的二进制数为10001,则该函数在while循环的第一次迭代中将1000“ 1”位与1进行与运算? 另外,>>> = 1的意义是什么?我认为“ >>>”会将位右移三位,但我无法确定此功能的目的。

任何帮助将不胜感激。谢谢!

解决方法

此功能计算设置为“ 1”的位数。 x & 1是按位与,且具有x当前值的最低有效位(如果x为奇数则为1,如果为偶数则为0)。因此,将其添加到结果中非常有意义。 x >>>= 1等效于x = x >> 1,这意味着“将x中的位向右移1个位置”(或对于无符号整数,将x除以2)。 / p>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...