移位和屏蔽二进制位

Shifting and Masking Binary Bits

我在一本书上看到了这段代码:

    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) 正在比较单个数字和 1。这是否意味着如果我的二进制数是 10001,函数是在 while 循环的第一次迭代中将 1000"1" 位与 1 进行 AND 运算? 另外, >>>= 1 有什么意义?我认为“>>>”是将位向右移动三位,但我无法弄清楚在此函数中这样做的目的。

如有任何帮助,我们将不胜感激。谢谢!

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