1.二进制中1的个数:
(1).依次判断一个二进制数的最右边一位是否是1,每次将需要判断的数右移一位:
public int hammingWeight(int n) {
int count = 0;
while(n != 0) {
if((n&1)!=0)count++;
n = n>>1;
}
return count;
}
可能会出现死循环(负数时)
(2).依次判断一个二进制数的最右边一位是否是1,每次将1的位置左移一位:
public int hammingWeight(int n) {
int count = 0;
int flag = 1;
while(flag != 0) {
if((n & flag) != 0) count++;
flag = flag << 1;
}
return count;
}
(3).n&n-1,减少循环的次数,有多少个1则循环多少次,把一个整数减去1,再与原整数相与,可以将该整数的最右边一个1变为0:
public int hammingWeight(int n) {
int count = 0;
while(n != 0) {
n = (n - 1) & n;
count++;
}
return count;
}
public boolean isPowerOfTwo(int n) {
return (n & (n-1)) == 0 && n > 0;
}