public static int bitCount(int i) {
// HD, Figure 5-2
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;
}
函数功能说明:技术整型i二进制表示中1的个数。
解释过程,设:
i=b0⋅20+b1⋅21+...+b30⋅230+b31⋅231。
要求的结果为: b1+b2+b3+...+b30+b31 的值。
第一步
i = i - ((i >>> 1) & 0x55555555);
(5的二进制为0101)得到的结果为:
i=b0⋅20+b1⋅21+...+b31⋅231−(b1⋅20+b3⋅22+b5⋅24+b31⋅230)=(b0−b1)⋅20+b1⋅21+(b2−b3)⋅22+...+b29⋅229+(b30−b31)⋅230+b31⋅231=(b0+b