求一个数二进制中1的个数:

一般方法

#include<stdio.h>

#include<stdlib.h>

int   count_one_bits(unsigned int value)

{

  int count = 0;

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

   {

       if (value & 1 == 1)      %2相当于&1)

        {

              count++;

         }

         value = value >> 1;      (右移一位相当于除2)

   }

  return count;

}

int main()

{

       unsigned int value= 0;

       scanf( "%d" , &value);

       int ret = count_one_bits(value);

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

       system( "pause" );

       return 0;

}

spacer.gif

优化:

#include<stdio.h>

#include<stdlib.h>

int  count_one_bits(unsigned int value)

{

                 int count = 0;

                 while (value )                         //value如果不为零则进入循环

                {

                          count++;                     //因为value不为0,所以二进制中至少有一个1

                          value = value &(value - 1);     //n与n&(n-1)二进制中总是差一个1

                }

                 return count;

}

int main()

{

                 unsigned int value= 0;

                scanf( "%d", &value);

                 int ret = count_one_bits(value);

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

                system( "pause");

                 return 0;

}

求一个数书不是2的n次方:

#include<stdio.h>

int main()

{

 

       int num=0;

  scanf("%d",&num);         

     if((value &(value - 1))==0);  

          printf("yes\n");

     else

          printf("no\n");

      return 0;

}