题目一:二进制中1的个数
【输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示】
方法一:从最低位开始用1分别与该整数进行与运算。falg=flag<<1,会一直增加,当flag为2147483648时,再进行一次位移运算就超出unsigned的范围,变成0,就会跳出该循环。不推荐该方法。
代码如下
class Solution {
public:
int NumberOf1(int n) {
int countNum=0;
unsigned flag=1;
while(flag)
{
if(n&flag)
countNum++;
flag<<=1;
}
return countNum;
}
};
方法二:用该整数减去1的结果与该整数进行与运算,这样可以进行几次,就表示该整数的二进制中有几个1
class Solution {
public:
int NumberOf1(int n) {
int countNum=0;
while(n)
{
n=(n-1)&n;
countNum++;
}
return countNum;
}
};
总结: