今天做了一道关于这个函数的题,就对他的源码分析了一下。
先上源码:
public static int bitCount(int i) {
1 i = i - ((i >>> 1) & 0x55555555);
2 i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
3 i = (i + (i >>> 4)) & 0x0f0f0f0f;
4 i = i + (i >>> 8);
5 i = i + (i >>> 16);
6 return i & 0x3f;
}
简书的编辑器真难用
插入图片之后就不能再下边编辑了是什么鬼。。
算了,就这样吧。要明白他这个>>>和& 0x55555555,& 0x33333333是什么意思。
>>>1的意思是把下面这个式子的b0去掉,用b1代替,同意往左移动。
& 0x55555555,16进制转化成二进制是1010101010101010101010101010101
& 0x33333333,16进制转化成二进制是110011001100110011001100110011