首先我们从结果上来看

  • 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

常规写法

  1. func hammingWeight(num uint32) int {
  2. res := 0
  3. for num > 0 {
  4. res += int(num & 1)
  5. num >>= 1
  6. }
  7. return res
  8. }
  1. func hammingWeight(num uint32) int {
  2. res := 0
  3. for num > 0 {
  4. res += 1
  5. num &= num-1
  6. }
  7. return res
  8. }

判断当前数是不是 2的幂次方

  1. func isPowerOfTwo( n int ) bool {
  2. return n > 0 && n &(n-1) == 0
  3. }