我正在尝试计算一个字节中设置的位数,但我似乎遇到了一些我找不到答案的问题。
我的代码目前看起来像
public static int numBits(byte input){
int count = 0;
while (input != 0){
if ((input & 1)==1){
count++;
}
input >>= 1;
}
return count;
}
在我尝试之前它似乎工作正常x = -1
。
这最终创建了一个无限循环,因为正在插入值 1 位。所以我偶然发现
我的解释意味着我应该使用input >>>= 1;
,但这仍然导致无限循环。
所以我试图通过尝试弄清楚发生了什么
byte x = -1;
System.out.println(x >>> 1);
System.out.println(x >> 1);
这导致
2147483647
-1
让我更加困惑。这个数字2147483647
是从哪里来的,我可能在哪里犯了逻辑错误?