y总原样模板+注释理解
#include <iostream>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
while (n -- )
{
int x, s = 0;
scanf("%d", &x);
//求二进制数里有多少个1:
//首先,用lowbit方法求出最后一位1所在位置代表的数【比如lowbit(101000)=1000】
//用x本身 减去 lowbit方法求出的结果
//直到x减成0
//每减1次,就代表找到1个1,所以s++
for (int i = x; i; i -= i & -i) s ++ ; //lowbit的实现:x & -x
printf("%d ", s);
}
return 0;
}