您的位置:首页 > 其它

整数二进制位中1的个数【每日一题】

2017-07-20 13:52 78 查看
题目:计算一个整数二进制位中1的个数。要求效率尽可能的高。

且能正确求正数和负数的二进制中1的个数。

//二进制中1的个数
int CountOf1One(int num)
{
//但是如果不知道是多少位的机器,冒然给出的32会让人很费解
//所以修改如下
int count = 0;
int i = 1;
while(i<=32)
{
int flag = num & i;
if(flag)
count++;
i = i<<1;
}
return count;
}

int CountOf1Two(int num)
{
int count = 0;
int flag = 1;
//用当flag左移至全部为0时也就知道了该机器的位数,增加代码的可读性
while(flag)
{
if(num & flag)
count++;
flag = flag << 1;
}
return count;
}

//以上两种方法皆是根据机器位数决定该循环的次数
//下面我们让这个程序有几个1就循环几次
int CountOf1Three(int num)
{
int count = 0;
while(num)
{
count++;
num = num & (num-1);
}
return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二进制
相关文章推荐