求n的第k位数字: n >> k & 1
返回n的最后一位1:lowbit(n) = n & -n
二进制中1的个数
C++代码实现:
#include<iostream>
using namespace std;
const int N=1000002;
int lowbit(int x){return x&-x;
}
int a[N];
int main(){int n;cin>>n;for(int i=0;i<n;i++){int res=0;cin>>a[i];while(a[i]) a[i]-=lowbit(a[i]),res++;cout<<res<<" ";}}