思路:输入正负都有,因此不能使用常规的 带符号>>, 在java中提供了不带符号右移运算符>>>,可以把输入统一当成正数处理,下为实现代码,
public int hammingWeight(int n) {
int ret = 0;
while (n!=0){
ret += n & 1;
n >>>= 1;
}
return ret;
}
最多比较32次,当然也可继续优化,
public int hammingWeight(int n) {
int ret = 0;
while (n!=0){
n &= n-1;//不停的消除最后一个一,有几个就会循环几次
ret++;
}
return ret;
}
适用于1少0多的情况,若为全一也会比较32次,