方法一、利用二进制右移,判断末位1的数量
#include <iostream>
using namespace std;
int main() {
long a,ans;
cin>>a;
while(a){
ans+=a&1;
a>>=1;
}
cout<<ans;
}
方法二、利用bitset01数组,使用count判断比特为1的数量
#include <bitset>
#include <iostream>
using namespace std;
int main() {
long a;
cin>>a;
bitset<64> bt(a);
cout<<bt.count();
}
方法三、使用c++编译器内置方法__builtin_popcountll(n)
#include <iostream>
using namespace std;
int main() {
long a;
cin>>a;
cout<<__builtin_popcountll(a);
}
方法四、Brian Kernighan 算法
对任何一个数 n,n & ( n − 1 )的结果是n的比特位最右端的1变为0的结果
执行次数表示1的个数
#include <iostream>
using namespace std;
int main() {
long n,ans=0;
cin>>n;
while(n){
n&=(n-1);
ans++;
}
cout<<ans;
}

京公网安备 11010502036488号