一、求n的二进制位表示中第k位是几?
1.把第k位移动到最后一位。
2.看个位
3.得出公式n>>k&1
二、返回n的最后一位1
1.也就是求解lowbit(n)
求解过程:n&(-n)
三、统计n的二进制表示中1的个数?
while(n) ans++, n -= lowbit(n);
例题:
解答:
#include<iostream>
using namespace std;
int lowbit(int x){
return x&(-x);
}
int main(){
int n;
cin>>n;
while(n--){
int x;
cin>>x;
int res=0;
while(x) x-=lowbit(x),res++;
cout<<res<<' ';
}
return 0;
}