求一个数二进制中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次方的主要内容,如果未能解决你的问题,请参考以下文章