首页 > 代码库 > 编程之美——二进制数中1的个数

编程之美——二进制数中1的个数

解法一:若二进制末尾为1,则除以2余1;

int count(int a){    int num=0;    while(a)    {        if(a%2==1)            ++num;        a=a/2;    }    return num;}

解法二:使用移位操作相除:

int count(int a){    int num=0;    while(a)    {        num+=a&0x01;        a>>=1;    }    return num;}

解法三:以上两种算法复杂度log2(t),t为a的二进制表示位数,若要求复杂度仅与二进制表示中1的个数相关,则有:

int count(int a){    int num=0;    while(a)    {        a&=a-1;        ++num;    }    return num;}

当然也可以采取查表法,以时间换空间,获得O(1)的复杂度;