方法一:利用按位与运算(&
)结合移位操作来逐位判断二进制数中的每一位是否为 1。
#include<iostream>
using namespace std;
int n,ans;
int main(){
cin>>n;
while(n){
if(n&1){
ans++;
}
n>>=1;
}
cout<<ans<<endl;
return 0;
}
方法二:高效的位运算技巧(Brian Kernighan 算法)
这个算法的思路是利用了一个特性:对于一个整数n
,n & (n - 1)
操作会将n
的二进制表示中最右边的 1 变为 0。
#include<iostream>
using namespace std;
int n,ans;
int main(){
cin>>n;
while(n){
n&=(n-1);
ans++;
}
cout<<ans<<endl;
return 0;
}
标签:cout,二进制,namespace,个数,int,ans,运算
From: https://blog.csdn.net/creator_Li/article/details/144583525