位运算
小于 1 分钟
对于每个数的二进制数来说,从右向左从0开始编号,比如n=15=1111,从右向左的位数就是0,1,2,3位
位运算:n>>k,n为二进制,将第k位移到最后一位,比如n=15,n>>1=111
基本操作:看数字n的二进制形式的第k位数字是几
步骤:1.先将第k位移到最后一位,用位移运算n>>k 2.看最后一位是几,用x&1
lowbit操作:返回x的最右一位1(十进制)
比如:n的二进制形式是10100,那么lobit(n)=8,他的二进制形式是100,即返回n的二进制形式的最右一位1
int lowbit(x){
return x&-x;
}
例题:给出n个数,求每个数二进制形式中1的个数。
#include<iostream>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
const int N=1e5+10;
int a[N];
int n,m,x;
int lowbit(int x){
return x&-x;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
int cnt=0;
while(x){
cnt++;
x-=lowbit(x);
}
cout<<cnt<<" ";
}
return 0;
}
Loading...