https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/
方法1:循环判断末位
func hammingWeight(num uint32) int {
cnt := 0
for num != 0 {
cnt += int(num & 1) // 如果num的末位是1则【num&1==1】,否则【num&1==0】
num >>= 1 // num右移一位,例如:11101 右移一位变为 01110
}
return cnt
}
方法2:n &(n-1)
n &(n-1):相当于把n最右边的1变成0,其余不变,所以当n不为0时,每次令 n = n &(n-1),就能消去n中最右边的一个1,所以统计循环的次数就是消去1的次数,也就是n中含有1的个数
func hammingWeight(num uint32) int {
cnt := 0
for num != 0 {
num = num & (num - 1)
cnt ++
}
return cnt
}