问题描述
我在书中碰到了这段代码片段:
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>