数的补码——二进制取反+1
正码0....0100101
反码1....1011010
补码1....1011011
lowbit()函数:返回二进制中第一个1的位置,如:101100,返回(100)2=4
int lowbit(int a){
	return a&(-a);
}
每次减掉第一个1就可以得到一个数二进制中1 的个数
#include <bits/stdc++.h>

using namespace std;

int n,a;

int lowbit(int a){
	return a&(-a);
}
int solve(int a){
	int ans=0;
	while(a){
		a-=lowbit(a);//每次减掉二进制中第一个1
		ans++;
	}
	return ans;
}
int main(int argc, char** argv) {
	cin>>n;
	for(int i=0;i<n;i++){
		scanf("%d",&a);
		cout<<solve(a)<<" ";
	}
	return 0;
}