第一种是用子集判定的方法改进版求一个数二进制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;
}