可能引起死循环的解法
如果输入负数,最终会变成0xFFFFFF
造成死循环。
int BitOneCount1(int n) {
int count = 0;
while (n) {
if (n & 0x1)
count++;
n >>= 1;
}
return count;
}
常规解法
int BitOneCount2(int n) {
int count = 0;
unsigned int flag = 1;
while (flag) { //循环的次数等于整数二进制的位数,32整数需要循环32次
if (n & flag)
count++;
flag <<= 1;
}
return count;
}
高效解法
int BitOneCount3(int n) {
int count = 0;
while (n) {
++count;
n = (n - 1) & n; //技巧
}
return count;
}