数的补码——二进制取反+1
正码0....0100101
反码1....1011010
补码1....1011011
lowbit()函数:返回二进制中第一个1的位置,如:101100,返回(100)2=4
int lowbit(int a){ return a&(-a); }每次减掉第一个1就可以得到一个数二进制中1 的个数
#include <bits/stdc++.h> using namespace std; int n,a; int lowbit(int a){ return a&(-a); } int solve(int a){ int ans=0; while(a){ a-=lowbit(a);//每次减掉二进制中第一个1 ans++; } return ans; } int main(int argc, char** argv) { cin>>n; for(int i=0;i<n;i++){ scanf("%d",&a); cout<<solve(a)<<" "; } return 0; }