第一种:普通求法


int main()

{

   unsigned int a = 0;

   int count = 0;

   scanf("%d", &a);

   while (a)

   {

       if (a % 2 == 1)

       {

           count++;

       }

       a = a / 2;

   }

   printf("%d\n", count);


   return 0;

}


第二种:移位操作符和按位与


int main()

{

   int a = 0;

   int count = 0;

   scanf("%d", &a);

   int i = 0;

   for (i = 0; i < 32; i++)

   {

       if (((a >> i)&1)==1)

       {

           count++;

       }


   }

   printf("%d\n", count);


   return 0;

}


第三种:较为高效的一种——直接按位与


int main()

{

   int a = 0;

   int count = 0;

   scanf("%d", &a);

   while (a)

   {

       a = a & (a-1);

       count++;

   }

   printf("%d\n", count);


   return 0;

}