首先我们从结果上来看
- n 是偶数:那么 n -1 就是 把 n 最后一个 1 置为 0,之后的所有位置为 1,n &(n-1) 的结果是把 n 的最后一个 1 变成 0
- n 是基数:那么 n-1 就是把 n 的最后一个 1 置为 0, 那么 n&(n-1) 的就是 最后一个 1变成0 ,也就是 n-1
统计二进制数有多少个 1
常规写法
func hammingWeight(num uint32) int {
res := 0
for num > 0 {
res += int(num & 1)
num >>= 1
}
return res
}
func hammingWeight(num uint32) int {
res := 0
for num > 0 {
res += 1
num &= num-1
}
return res
}
判断当前数是不是 2的幂次方
func isPowerOfTwo( n int ) bool {
return n > 0 && n &(n-1) == 0
}