题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:
1)可以用1,10,100,... 逐个与改数进行&运算,统计结果非零次数
2)巧妙方法:
一个整数减去1,在与原整数做与运算,会将最右边的一个1变成0.
如:111000(二进制) - 1 并 111000 = 110000,会把最右边的那个1变成0!
那么二进制中有多少个1,可进行这样的操作多少次;
C++
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
int key = 1;
while(key)
{
if(n&key)
++count;
key = key<<1; //位运算左移
}
return count;
}
};
巧妙方法:
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n)
{
++count;
n = (n-1)&n;
}
return count;
}
};