我正在研究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;
}
Run Code Online (Sandbox Code Playgroud)
相反,我找到了一种方法,我完全不知道在做什么(对我来说似乎很神奇):
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> …Run Code Online (Sandbox Code Playgroud)