1.求解整形數(shù)的二進(jìn)制表示中的1的個數(shù)
代碼如下:

2.算法核心:
3.算法解釋:為什么 x = x &(x - 1) 就可以清除掉最右邊的 1 呢?
因?yàn)閺亩M(jìn)制的角度講,x 相當(dāng)于在 x - 1 的最低位加了一個 1 ,
eg1
?8(1000)= 7(0111)+ 1(0001)
?8 & 7 = (1000)&(0111)= 0(0000)
?/* 清除了8最右邊的1,即最高位的1,因?yàn)?只有一個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)
作為記錄,方便學(xué)習(xí)。
標(biāo)簽: