用位运算,但是不要用n>>=1;如果n是负数的话,就不会停止,改用flag<<=1即可,当超过1<<32时,flag就为0 了
#include<cstdio>
#include<cstring>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int count = 0;
int flag = 1;
while(flag)
{
if(n&flag)
count++;
flag<<=1;
}
printf("%d\n",count);
}
return 0;
}