Write a function that takes an unsigned integer and returns the number of ’1' bits it has.
For example, the 32-bit integer ’11' has binary representation
00000000000000000000000000001011
, so the function should return 3.
思路:
不断右移数字,与1,查找为1的个数;或者mask不断左移,左移不需要考虑算术右移或者逻辑右移的问题。
public static int hammingWeight1(int n) {
int res = 0;
while (n != 0) {
res += n & 1;
n >>>= 1;
}
return res;
}
public int hammingWeight(int n) {
int bits = 0;
int mask = 1;
for (int i = 0; i < 32; i++) {
if ((n & mask) != 0) {
bits++;
}
mask <<= 1;
}
return bits;
}
非按位查找,只找数字中是1的位,可以利用n&(n-1)会消去n最右边1的特性。
public static int hammingWeight2(int n) {
int res = 0;
while (n != 0) {
res += 1;
n &= (n-1);
}
return res;
}