前言
位运算的效率极高,使用为运算只有一个目的就是块!!!
一、位运算的两种常用操作
(1)求n的第k位数字 :n >> k &1; (&:全一则一)
![](https://img-blog.csdnimg.cn/direct/45d1a414855548ab9ee00a9613c8aaaf.png)
第几位是从0开始标的,如上面;上面那个式子相当于把第几位数字移到个位。
(2)返回最后一位1:lowbit(n)= n &-n;
统计x当中1的个数:
//优化版
int count(int x){
int cnt = 0;
while(x){
x = x & (x - 1);
cnt ++;
}
return cnt;
}
二、典型例题
题目:
![](https://img-blog.csdnimg.cn/direct/b6c78fcdf7914125b89522c6949c9b60.png)
AC代码:
#include<iostream>
using namespace std;
const int N=1e5+7;
int n;
int a[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
int cnt=0;
while(a[i]){
a[i]=a[i]&(a[i]-1);
cnt++;
}
cout<<cnt<<" ";
}
return 0;
}
总结
希望大家在看完本篇文章后能对位运算有一个初步的理解,感谢大家的观看!!!