如下代码输出多少:
#include <iostream>
using namespace std;
int BTcount(int x) {
int count = 0;
while(x) {
x=x&(x-1);
count++;
}
return count;
}
int main()
{
cout<<BTcount(9999)<<endl;
return 0;
}
输出:
8
这题需要一点数学知识,输出结果是:
转换为二进制之后1的数量
原理:假设一个数有n个1,最低位开始数第一个1(后面都是0),那如果 x-1,必然使得这一位为0,后面都变成1了。
比如:12(1100),那11就是1011
相与必然去掉这个1,但是高位的1不动,于是就得出上述结论了