1:得到一个数除以2的效果 (l+r)>>1
void ceshi(int l,int r){
int mid=l+r>>1;//等效于(l+r)/2
}
2:输出一个数的二进制数 (l>>n&1)
void ceshi(int n){
int t=2;
int res=0;
for(int i=1;i*t<=n;i=i*t,t*2) res++;
res++;//res代表n二进制表示的位数
for(int i=res-1;i>=0;i--) cout<<(n>>i&1);//通过循环右移得到与&1操作得到n的二进制表示形式
}
3:将一个数的二进制的最后一位1变为0(i&(i-1))
void ceshi(int n){
int res=0;
for(int i=n;i;i=i&(i-1)) res++;//(i&(i-1)可以将i的二进制表示中最后一位1变为0;
//在通过i=i&(i-1)将i值更新,通过res记录循环次数可以得到n二进制表示的1的个数
cout<<res<<" ";
}
4:lowbit操作:得到一个数二进制表示中最后一个1位的值 (i&-i)
void ceshi(int n){
int res=0;
for(int i=n;i;i-=i&(-i)) res++;//(i&(-i))可以得到n二进制表示中最后一个1加上后面的0表示的数的大小
//在通过i-=i&(-i)将i值更新,通过res记录循环次数可以得到n二进制表示的1的个数
cout<<res<<" ";
}