跳转至

15.二进制中 1 的个数 (Easy)*

题目描述*

请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9  表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

示例*

两种方法,右移统计 1 个数,或 n & (n - 1) 每次会去掉 n 的末位 1。

不过使用右移统计 1 的个数,输入负数会导致无限循环,所以可以把 1 左移判断每一位。

类似问题:

  • 判断一个数是否是 2 的整数次方,即二进制只有一个 1,只要 n & (n - 1) 为 0 即可。
  • 判断整数 m 和 n 的二进制相差多少位,先异或,然后统计二进制 1 的个数。
class Solution {
public:
    int hammingWeight(uint32_t n) {
        int cnt = 0;
        while(n){
            // cnt += n&1;
            // n = n >> 1;
            cnt++;
            n &= n - 1;
        }
        return cnt;
    }
};

最后更新: July 23, 2022