解题思路
使用 n & (n-1) 可以去掉最后一个1
代码
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeightA(int n) {
// 可以使用%2和/2来统计,但是会出现问题
int cnt = 0;
while(n!=0){
if(n%2==1) cnt+=1;
// n >>= 2; 会形成-1的死循环
n /= 2;
}
return cnt;
}
public int hammingWeight(int n) {
// n & (n-1) 能去除二进制中的最后一个1
int cnt = 0;
while(n!=0){
n = n & (n-1);
cnt+=1;
}
return cnt;
}
}