注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 用了十年的QQ号,第二次被..
 帮助

算法搜集:求取二进制中1的个数


2008-04-10 10:26:12
 标签:算法 二进制   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ssbird.blog.51cto.com/277690/70844
题:给定一个8bit的变量,求其二进制表示中“1”的个数。

算法一:
int Count(int v)
{
    int num=0;
    while(v)
    {
        if(v%2==1)
           num++;
        v=v/2;
    }
    return num;
}

算法二:
int Count(int v)
{
    int num=0
    while(v)
    {
        num+=v&ox01;
        v>>=1;
    }
    return num;
}

算法三:
int Count(int v)
{
    int num=0;
    while(v)
    {
        v&=(v-1);
        num++;
    }
    return num;
}

算法四:
int Count(int v)
{
    int num=0;
    switch(v)
    {
        case 0x0:
             num=0;
             break;
        case ox1:
        case 0x2:
        case 0x4:
        case 0x8:
        case ox10:
        case ox20:
        case ox40:
        case 0x80:
             num=1;
             break;
        ......    
     }
}
注:提供了一种以空间换时间的思路

算法五:
int countTable[256]=
{
   0,1,1,2,1,2,2,3,2,3,3......
     3,4,3,4,4,5,1,2,2,3......
     .........................
}

int Count(int v)
{
   return countTable[v];
}
注:查表法,以空间换时间,效率最高。

本文出自 “Running...” 博客,请务必保留此出处http://ssbird.blog.51cto.com/277690/70844





    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: