码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-03-18 01:55:50      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:求二进制中1的个数优化

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

原文地址:http://11142019.blog.51cto.com/11132019/1752371

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!