算法1
lowbit
while (n -- )
{
int x, s = 0;
scanf("%d", &x);
for (int i = x; i; i -= i & -i) s ++ ;//在计算机中-i是取反加1,所以&后变成最后位1的数,减去一次相当于减一次1
printf("%d ", s);
}
算法2
while(x)
{
if(x & 1) res++;
//如果x最后一位是1就加答案
x >>= 1; //右移1位
}
算法3
while(x)
{
x&=(x-1);//-1,&=就减去最后一位1
s++;
}
算法4
for (int i=0;i<32;i++)
{
res+=x&(1<<i)?1:0;//如果这位有1,就答案+1
}