第一种是用子集判定的方法改进版求一个数二进制1的个数 n=(n-1)&n,表示消去了一个1,可以用一个while循环,一个ans变量初值为0,求当n!=0时的循环次数!
这个方法也可以判断一个数是否是2的整数倍 1.32位是int型整数的极限,也可以用n>>>i代替1<<i/
using namespace std;
bool solve(int n)
{
int count = 0;
for (int i = 0; i < 32 ; i++)
{
if (n & (1 << i))
{
count++;
}
}
cout << count;
return true;
}
int main()
{
int n;
cin >> n;
solve(n);
return 0;
}
2.就是用&相消1
```#include <iostream>
using namespace std;
int main()
{
int ans=0;
int x;
cin>>x;
while(x!=0)
{
x=(x-1)&x;
ans++;
}
cout<<ans;
return 0;
}