1.求解整形数的二进制表示中的1的个数
代码如下:

2.算法核心:
3.算法解释:为什么 x = x &(x - 1) 就可以清除掉最右边的 1 呢?
因为从二进制的角度讲,x 相当于在 x - 1 的最低位加了一个 1 ,
eg1
8(1000)= 7(0111)+ 1(0001)
8 & 7 = (1000)&(0111)= 0(0000)
/* 清除了8最右边的1,即最高位的1,因为8只有一个1 */eg2
7(0111)= 6(0110)+ 1(0001)
7 & 6 = (0111)&(0110)= 6(0110)
/* 清除掉了7最右边的一个1 */
6(0110) = 5(0101) + 1(0001)
6 & 5 = 6(0110) & 5(0101) = 4(0100)
/* 同理 */
4(0100) = 3(0011) + 1(0001)
4 & 3 = 4(0100) & 3(0011) = 0(0000)
作为记录,方便学习。