我正在研究 Java 如何计算 int 的位集。
我脑子里有这样简单的事情(我认为这是正确的):
public static int bitCount(int number){
final int MASK = 0x1;
int count = 0;
for(int i = 0; i < 32; i++){
if(((number >>> i) & MASK) == MASK){
count++;
}
}
return count;
}
相反,我找到了一种我完全不知道在做什么的方法(对我来说似乎很神奇):
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
有人可以帮助理解它的作用以及为什么像我最初想到的那样简单的功能是/可能是坏的吗?