位运算技巧
位运算基础是了解源码,反码和补码。
这里补充一些别的技巧。
lowbit操作,知道该二进制数的最后一个1在第几位
#include<bits/stdc++.h>
#include<iostream>using namespace std;
int lowbit(int x){//返回最后一位1 //x&(-x)与x&(~x+1) 等价 return x&(-x);
}
int main() {int n;cin>>n;int x;int res;while(n--){cin>>x;res=0;while(x) {cout<<lowbit(x)<<" ";x-=lowbit(x);res++;}cout<<res<<" ";}return 0;
}
另外一个,知道一个二进制第k位是几的
样例,一个10进制数转化成二进制数的小程序
#include<iostream>
using namespace std;
int main(){int n;cin>>n;int a=n;int cnt=0;while(a){a=a/2;cnt++;}for(int k=cnt-1;k>=0;k--) cout<<(n>>k&1);return 0;
}