求一个数二进制中1的个数(优化)。判断一个数是不是2的n次方

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个数二进制中1的个数(优化)。判断一个数是不是2的n次方相关的知识,希望对你有一定的参考价值。

求一个数二进制中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;

}


技术分享

技术分享


优化:

#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;

}


本文出自 “11132019” 博客,请务必保留此出处http://11142019.blog.51cto.com/11132019/1752371

以上是关于求一个数二进制中1的个数(优化)。判断一个数是不是2的n次方的主要内容,如果未能解决你的问题,请参考以下文章

不使用中间变量,交换变量的值。求一个数二进制中1的个数

求一个数的二进制数中所含1的个数的代码实现

求一个数二进制中包含多少个1

一些小技巧

如何迅速判断一个数是不是2的幂3的幂4的幂?

如何求一个数的二进制的值