求2进制中1的个数

来源:互联网 发布:农夫抢购软件 编辑:程序博客网 时间:2024/06/03 12:40

解法1

int Count(unsigned int v){    int num=0;    while(v)    {        num += v & 0x01;        v>>=1;    }    return num;}

算法复杂度log2 v


解法2

int Count(unsigned int v){    int num=0;    while(v)    {        v&=(v-1);        num++;    }    return num;}

算法复杂度O(M),M为1的个数


扩展问题:求两个整数中有多少位是不同的,应用解法1.

int diff(unsigned int a, unsigned int b){    int num=0;    while(a && b)    {        if((a & 0x01 == 0x01) && (b & 0x01 == 0x01))        {            num++;        }        a>>=1;        b>>=1;    }    return num;}




原创粉丝点击