思路
本题要求计算出一个整数的二进制中的1的个数,考察的是位运算的运用和理解。
本题会用到>>、>>>、&等运算符,不会的可以去查一下。
本题的重点在于怎样去统计1的个数,其实这个和去计算一个数各位数之和类似(比如让你求39的各位数之和,也就是12)。
那个题是循环取余法去取得各个位的值然后加起来即可,那么我们是否可以采用类似的方法呢?
注意到本题的数实际上是在二进制上进行操作,而那个题是在10进制上进行取模10操作的.那类似的我们可以在二进制上进行取模2操作,这样就能获取这个数最右边上的值了,假设9的二进制是1001,那么对其进行取模2得到的就是那个1,那么这样就能进行统计了。
代码
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int sum=0;
while(n!=0){
if((n&1)!=0)sum++;
n=n>>>1;
}
return sum;
}
}