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;
}