题目描述
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。
例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
分析
n&1==1,n的二进制中最后一位是1。
n>>1,表示n的二进制向右移动一位。
n&(n-1)表示将n的二进制中的最后一位1被移除,通过-1表示最后一位1变为0,通过&操作表示n的二进制中的最后一位1&0变为0。
public class Solution {
public int hammingWeight(int n) {
int res = 0;
while(n != 0) {
res += n & 1;
n >>>= 1;
}
return res;
}
}
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int ans=0;
while(n!=0){
n=n&(n-1);
++ans;
}
return ans;
}
}