问题:输入一个整数,输出该数二进制表示中的1的个数。其中负数用补码表示。
思路:
1.简单的方法就是逐位和1相与;
2.巧妙方法:一个整数减去1,再和原数做“按位与”-“&”运算,会将二进制表示中最右边的一个1变为0;那么二进制中有多少个1,就可以进行多少次这个的操作。
具体代码:(C++)
1.
class Solution
{
public:
int NumberOfOne(int n)
{
int count = 0;
unsigned int flag =1;
while(flag)
{
if(n & flag)
++count;
flag = flag <<1; // 左移1位
}
return count;
}
};
2
class Solution
{
public:
int NumberOfOne(int n)
{
int count = 0;
while(n)
{
++count;
n = (n-1)&n;
}
return count;
}
};