[蓝蓝计算机考研算法训练二期]-day22

109 阅读1分钟

31、输入一个整数n,输出该数32位二进制表示中1的个数。其中负数用补码表示。

数据范围:-2^31 <= n<=2^31-1
即范围为:-2147483648 <= n <= 2137483647
示例1
输入:

10

返回值:

2

说明:

十进制中10的32位二进制表示为 0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1。

1、思路

二进制数&1=0,则最后一位是0;二进制&1=1,则最后一位是1,使用res来统计1的个数,res初始为0,对于每位,res+=n&1即可,然后将该数右移一位。

2、具体实现(java)

public static int hammingWeight(int n) {
        int res = 0;
        while(n != 0) {
            res += n & 1;
            n >>>= 1;
        }
        return res;
}