求二进制中1 的个数

来源:互联网 发布:新手开淘宝店用多少钱 编辑:程序博客网 时间:2024/06/05 09:26

问题描述:
实现一个函数,输入一个整数,求这个整数的二进制中1的个数。

方法1
每次让最右边的以为& 1,然后将这个数右移一位,当这个数为0的时候停止。
//缺点负数重1的个数不能求出,会陷入死循环

int NumOf1(int x){    int count = 0;    while (x)    {        if (x & 1 == 1)        {            count++;        }        x >>= 1;  //运算效率比除高    }    return count;}

方法二:

//缺点:需要循环32次但可以找出负数中1的个数int NumOf1(int x){    int count = 0;    int i = 0;    while (i<32)    {        if (x & 1 == 1)        {            count++;        }        x >>= 1;  //运算效率比除高        i++;    }    return count;}

方法三

//缺点:需要循环32次但可以找出负数中1的个数int NumOf1(int x){    int count = 0;    int i = 0;    int flag = 1;    while (flag)    {        if (x & flag)        {            count++;        }        flag <<=1;    }    return count;}

方法四、

原理:把一个整数减去一,再和原来的整数做与运算会把这个整数最右边的一个一变成0.

int NumOf1(int x){    int count = 0;    while (x)    {        count++;        x &= (x - 1);    }    return count;}
0 0
原创粉丝点击