i&(i-1) 的作用:将i的二进制表示中的最低位为1的改为0。
#include <iostream>
using namespace std;
int Find_Number_Is_One(int &i)
{
//记录1的个数
int j = 0;
while (i!=0)
{
j++;
i &= (i - 1); // 清除最低位的1
}
return j;
}
int main( )
{
int a=0;
cout << "请输入您所需要求(十进制转化为二进制1的总数)的数:" << endl;
cin >> a;
cout <<"1的个数为:"<<Find_Number_Is_One(a);
return 0;
}
例如:99的二进制位01100011,则需要4次将i变为0;
当i不等于0时进入循环
01100011—>01100010
01100010—>01100000
01100000—>01000000
01000000—>00000000
当i=0时出循环,j循环了4次,输出j=4