面试题15:二进制中1的个数 原题链接
class Solution {
public:
int hammingWeight(unsigned int n) {
/*
方法1:n与1做与运算,不断右移,得到1的个数,这样的方法存在的问题是如果输入的是负数且移位后做符号扩展则会死循环
方法2:设置一个flag=1,将flag与n做与运算,不断左移flag,直到flag为0
方法3:将n与n-1做与运算,这样能够将n的最右边的1变为0,不断运算直到n变为0
*/
int ans = 0;
while(n >= 1){
n = n & (n - 1);
++ans;
}
return ans;
}
};