您的位置:首页 > 其它

求一个数二进制位中有多少个 1 的不同解法

2015-10-17 16:44 232 查看
*返回一个数的二进制表达中1的个数。*
#include<stdio.h>
int main()
{
unsigned int i;
scanf("%d",&i);
printf("%d的二进制表达中有 %d 个1",i,count_one_bits(i));
return 0;
}
int  count_one_bits(unsigned int m)
{
int n,count;    // 返回 1的位数
n = m;
count = 0;
while(n % 2 == 0)
n = n / 2;
while(n % 2 == 1)
{
count++;
do
{
if (n != 0)
n = n / 2;
else
break;
}
while(n % 2 == 0);
}
return count;
}
这就是最容易想到的办法,不断地除2模2取余,下面给出另外一种方法(省略部分语句)
...
i = 32;
while(i--)
{
if(num & 1 == 1)
count++;
num = num>>1;
}
这种方法就是向右移位,使最低位&上1进行判断,还有一种更为高效的方法
int count_one_bit(int num)
{
int count = 0;
while(num)
{
count++;    //只要一个数不为0,则二进制表达中至少有一个1
num = num & (num-1);//没执行一次这条语句,其实就是使该数最低位的一个1置成0
}
return count;
}


本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1703820
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: