这段代码是Integer.bitCount的代码,求int类型的二进制补码形式中1的bit数。
public static int bitCount(int i) {
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;
}自己在编写类似的方法时,有一个思路,供大家参考。
int类型是有符号类型的特点,当最高位为1时,表示一个负值。利用这一特点,通过左移位操作<<,
然后判断正负值,为负标明该位为1,正值标明该位为0。代码如下。
public static int bitCount(int i) 
{
int count=0;//对二进制数中为1的位进行计数
for(int j=0;j<32;j++)
{
if(i<0)
count=++count;
i=i<<1;
}
return count;
}