题意描述:写一个函数计算无符号整数二进制形式中1的个数。如“11”(二进制“00000000000000000000000000001011”)返回3;
解题思路一:Java中没有unsigned int,这里采用通过移位来实现计数1的个数
int hammingWeight(int n) {
int count = 0;
while(n != 0){//因为Java中没有无符号的整数,所以用!=0来判断数学是否处理完成而不能用>0判断
count += n & 1;//取出第一位
n>>>=1;//数字右移一位
}
return count;
}
解题思路二:上面的解法如果遇到负数形式则会出现死循环,这里可以简单一点直接调用Java API: Integer.bitCount()
int hammingWeight1(int n){
return Integer.bitCount(n);
}
解题思路三:(最推荐)把一个整数减去1再和原来整数做与运算,会把该整数最右边一个1变成0,那么一个整数的二进制表示中,有多少个1,就可以进行多少次这样的操作
int hammingWeight2(int n) {
int count = 0;
while (n != 0) {
count++;
n = (n - 1)&n;
}
return count;
}