二进制中1的个数

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。

思路1:按位枚举

因为无符号整数有32位,从右到左按位统计1的个数。

代码:

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int ans = 0;
        for(int i = 0;i < 32;i++) {
            if(n&(1 << i)) {
                ans++;
            }
        }
        return ans;
    }
};

思路2:二进制规律

记a = 1,则a&(a-1) = 0,a = 1110则a - 1 = 1101,a&(a-1)= 1100, 一个数a和它的减一做与运算,结果把a最后一个1消掉了。重复这个过程,可以统计出1的个数。

代码

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int ans = 0;
        while(n != 0) {
            ans++;
            n = n & (n - 1);
        }
        return ans;
    }
};