法一:
#include<iostream>
#include<algorithm>
using namespace std;
int Count(int x){
int ans = 0;
while(x != 0){
++ans;
x = x&(x-1);
}
return ans;
}
int main(){
cout<<Count(9999)<<endl;
return 0;
}
输出结果:8
分析如下:
1. Count函数用来计算某个数x的二进制中1的个数
2. x&(x-1)的作用是把x的二进制中最右边的1变成0;假设现在x的二进制位1001000,则x-1的二进制为1000111
则x&(x-1)可以把最右边的一个1去掉。
当一个数减1的时候,它最右边的那个值为1的位将变成0,同时1右边的所有位变成1.
3. 再把结果赋值给x,这样就可以求出x的二进制中1的个数
法二
#include<iostream>
#include<algorithm>
using namespace std;
int Count(int x){
int ans = 0;
while(x != 0){
if(x&1){
++ans;
}
x >>= 1;
}
return ans;
}
int main(){
cout<<Count(9999)<<endl;
return 0;
}
输出结果是:8
分析:
1. Count函数用来计算一个数x的二进制中1的个数
2. x&1的结果用来判断x的最右边的一位是1还是0,如果是1则x&1则为1,如果是0则x&1则为0;
如果x&1则把ans加1
3. 求完一位之后就把x右移一位。
假设x的二进制位00000000 00000000 00000000 10101100,可以求出有三个1。