您的位置:首页 > 其它

求一个数二进制中1的个数

2015-10-28 19:52 183 查看
题目:

对于一个字节的无符号整形变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高

分析:其实很简单,对于8这样的一个数,其二进制1000,其1的个数为1.

可以将它与它减1的数相与,这样相当于1000与0100相与一次,结果为0

对于10,其二进制1010,其1的个数为2

按照上术的思路,1010与1001相与一次结果为1000

1000再与0111相与,结果为0

……

可以得出结论,求一个二进制数中1的个数可以将它与它减1的数相与,直到最后结果为0

相与多少次则为1的个数

#include<iostream>
using namespace std;
int findOne(int x)
{
int count = 0;
while (x)
{
x = x & (x - 1);
count++;
}
return count;
}
int main()
{
int x = 8;
cout << findOne(x) << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: