移位和屏蔽二进制位
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)。
我在一本书上看到了这段代码:
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)。