题目要求 1的个数,对一个数m 他的第一个一可以用 m & -m 获得(思考补码的意义) 因此 m & ~(m & -m) 就可以得到一个数去除最高位后的数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
while(n -- )
{
int m;
cin >> m;
int ans = 0;
while(m)
{
m = m & ~(m & -m);
ans ++;
}
cout << ans << " ";
}
return 0;
}