// i & -i:在计算机里,负数是以补码形式存储的。
// -i就是i按位取反再加 1。
// i & -i会得到i的二进制表示里最低位的 1 所对应的十进制数值。
// 例如,若i的二进制是10100,那么-i的二进制是01100,
// i & -i的结果就是00100,也就是十进制的 4。
// i -= i & -i:这行代码会把i减去其最低位的 1 所对应的数值。
// 还是以i的二进制为10100为例,i & -i为00100,执行i -= i & -i之后,
// i的二进制就变成了10000。
// 在树状数组里,i -= i & -i用于向上更新节点,
// 而i += i & -i用于向下更新节点。树状数组是一种高效的数据结构,
// 能在(O(log n)的时间复杂度内完成单点更新和区间查询操作。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
while (n -- ){
int x,ans=0;
cin >> x;
for(int i=x;i;i-=i&-i) ans++;
cout << ans <<' ';
}
}