您的位置:首页 > 其它

求二进制中1 的个数

2016-07-02 20:14 239 查看
问题描述:

实现一个函数,输入一个整数,求这个整数的二进制中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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  1的个数