解法一:v & (v - 1)
计算一个二进制数中 1 的出现次数其实很简单,只需要不断用 v & (v - 1)
移除掉最后一个 1 即可。
举个例子,如果v=11010,那么v-1=11001, 则v & (v - 1)
=11000,
算出的结果和原先的v相比就移除了最后一个1.
class Solution {
public:
int hammingWeight(uint32_t n) {
int count = 0;
while(n)
{
n = n&(n-1);
count++;
}
return count;
}
};
解法二:利用“移位”操作实现
如果 n & 1 = 0, 则 n 的最后一位二进制位是 0 ;如果 n & 1 = 1, 则 n 的最后一位二进制位是 1。
import java.util.Arrays;
class Solution {
static public int hammingWeight(int n) {
int num = 0;
//因为一个int数是32位二进制,所以最多能右移32次
for(int i = 31;i >= 0; i--) {
//如果if条件成立,说明该二进制串的最后一位二进制数是1
if((n >>> i & 1)==1){
num++;
}
}
return num;
}
public static void main(String[] args) {
System.out.println(hammingWeight(11));
// System.out.println();
}
}