求一个数二进制中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的个数
对于一个字节的无符号整形变量,求其二进制表示中“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; }
相关文章推荐