给定整数 计算其中1的数量
思路:n = n & (n - 1) while判断num不为0
public static int getOnes(int n) {
if (n == 0) return 0;
int count = 0;
while (n != 0) {
count++;
// 将n最右边的1删掉
n = n & (n - 1);
}
return count;
}
思路:num不带符号的右移动,判断最右边是否为1
public static int getOnes1(int n) {
if (n == 0)
return 0;
int count = 0;
while (n != 0) {
if ((n & 1) == 1) {
count++;
}
// 不带符号的右移动 否则n为负数的时候回死循环
n >>>= 1;
}
return count;
}
思路:移动mask不会出现死循环的问题
public static int getOnes2(int n){
if (n == 0)
return 0;
int count = 0;
int mask = 1;
for (int i = 0; i < 32; i++) {
if((n ^ mask) == 1){
count++;
}
mask <<= 1;
}
return count;
}