(一)题目描述
请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1.因此,如果输入9,则该函数输出2.
(二)思路分析
把一个整数减去1,再和原整数做与&运算,会把该整数最右边的1变为0.那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。
(三)代码实现
//32位的平台
#include <iostream>
using namespace std;
class Solution {
public:
void NumberOf1(int n) {
int count = 0;
while(n)
{
count++;
n = n & (n-1); //n=n|(n+1); 0的个数
}
cout << count<< endl;
}
};
int main()
{
Solution sol;
sol.NumberOf1(9); //00000000 00000000 00000000 00001001->2个1
sol.NumberOf1(-1); //11111111 11111111 11111111 11111111->32个1
sol.NumberOf1(12); //00000000 00000000 00000000 00001100->2个1,30个0
sol.NumberOf1(255); //00000000 00000000 00000000 11111111->8个1,24个0
return 0;
}