每次右移一位,判断当前位是否为 1
func hammingWeight(num uint32) int {
ans := 0
for i := 0; i < 32; i++ {
if (num >> i)&1 == 1 {
ans++
}
}
return ans
}
n-1 能让二进制数 n 最右边的 1 变成 0,此 1 后面的数全部变为 0
n & (n-1) 能让二进制数 n 最右边的 1 变成 0
func hammingWeight(num uint32) int {
ans := 0
for num != 0 {
num = num & (num-1)
ans++
}
return ans
}