位运算の神奇技巧
众所周知,位运算有许多很骚神奇 的技巧,那怎么用呢?
1.获取int最大值:
int MaxInt(){
return ~(1<<31);//2147483647
}
2.获取int最小值:
int MinInt(){
return 1<<31;//-2147483648
}
我绝对不会告诉你#include<limits.h>
自带INT_MAX
和INT_MIN
的。
3.交换两数:
void swap(int &a,int &b){
a^=b^=a^=b;
}
4.取绝对值:
int abs(int x){
return (x^(x>>31))-(x>>31);
}
5.两数最大值:
int max(int a,int b){
return b&((a-b)>>31)|a&(~(a-b)>>31);
}
6.两数最小值:
int min(int a,int b){
return a&((a-b)>>31)|b&(~(a-b)>>31);
}
7.判断一个数是不是2的幂:
bool is_two_pow(int n){
return n>0?(n&(n-1))==0:false;
}
8.从低位到高位,取n的第m位:
int getbit(int n,int m){
return (n>>(m-1))&1;
}
9.从低位到高位,将n的第m位置1:
int setbittoone(int n,int m){
return n|(1<<(m-1));
}
10.从低位到高位,将n的第m位置0:
int setbittozero(int n, int m){
return n&~(1<<(m-1));
}
11.取整数n的二进制中最后一个1:
int lowbit(int n){
return -n&n;
}
12.去掉整数n的二进制中最后一个1
无奖竞猜环节,留给大家啦!