位运算:n & (n - 1)
 睡不醒的鲤鱼 2021-05-15  每日一题 LeetCode
 题目
 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
 解析
 循环去除 n 的最后一位 1,直至 n 的值为 0,统计循环的次数即可。
 代码
  class Solution {
public:
    int hammingWeight(uint32_t n) {
        int ans = 0;
        while (n) {
            n &= (n - 1);
            ans++;
        }
        return ans;
    }
};
 1
2
3
4
5
6
7
8
9
10
11
func hammingWeight(num uint32) int {
    ans := 0
    for num != 0 {
        num &= num - 1
        ans++
    }
    return ans
}
 1
2
3
4
5
6
7
8
   题目
 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
 解析
 由于 2 的幂次方的二进制形式中只包含一个 1,因此将其去掉后判断是否为 0 即可。
 代码
  class Solution {
public:
    bool isPowerOfTwo(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }
};
 1
2
3
4
5
6
func isPowerOfTwo(n int) bool {
	return n > 0 && (n&(n-1)) == 0
}
 1
2
3