/*
位运算
n的二进制表示中第k位是几
操作步骤:1.先把第k位数字移到最后一位 n>>k表示右移k
2.看个位是几 x&1
两步综合到一起即 n>>k&1
右移>> 1010右移一位101 右移两位10 右移零位表示不变
只要数字经过右移就会变成二进制数字
lowbit(x):返回x的最后一位1 实质是x&-x=x&(x取反+1)
x=1010 返回10
x=101000 返回1000
二进制中-x的二进制表示等于x取反+1
x=101010...............100000
~x=010101...............011111
~x+1=010101...............100000
x&-x=000000000000000000000100000
*/
/*#include<iostream>
#include<string.h>
using namespace std;
int main(){
int n=15;
for(int i=3;i>=0;i--) cout<<(n>>i&1);
return 0;
} //该代码解决一个数字的二进制表示形式
*/
//利用lowbit()解决二进制中1的个数问题
#include<iostream>
using namespace std;
int lowbit(int x){
return x&-x;
}
int main(){
int n;
cin>>n;
while(n--){
int x;
cin>>x;
int res=0;
while(x) x-=lowbit(x),res++;//每次减去x的最后一位1
cout<<res<<" ";
}
return 0;
}