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

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

时间:2015-10-17 19:16:49      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:二进制 位运算

*返回一个数的二进制表达中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

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

标签:二进制 位运算

原文地址:http://2627lounuo.blog.51cto.com/10696599/1703820

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