面试题15:二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:方法1,使用一个无符号的整数1,从右到左去&n,执行完一次后,向左移位(对于32位整数来说,需要执行32次)。方法2,使用n&(n-1),来求(执行次数为1的个数)。
代码一(普通解法):
int NumberOf1(int n)
{
int count = 0;
unsigned int flag = 1;
while(flag)
{
if(n & flag) count++;
flag = flag << 1;
}
}
代码二(优秀解法):
class Solution {
public:
int NumberOf1(int n)
{
int sum = 0;
while(n)
{
sum++;
n = n & (n - 1);
}
return sum;
}
};