写在前面:
整理出来的一些能显著提高性能的位运算优化方法
C++
(类似)x=x*10 |
x=(x<<1)+(x<<3) |
x/=2 |
x>>=1 |
x%2==1 |
x&1 |
x%2==0 |
!(x&1) |
(long long)int a,b,c; c=a;a=b;b=c; |
(long long)int a,b; a^=b;b^=a;a^=b |
x*=2n |
x<<=n |
x/=2n |
x>>=n |
int a; if(a<0) a=-a; |
int a; a=(a^(a>>31))-(a>>31); |
long long int a; if(a<0) a=-a; |
long long int a; a=(a^(a>>63))-(a>>63); |
(取得int的最大值) |
(1<<31)-1 |
(取得long long int的最大值) |
(1<<63)-1 |
(取得int的最小值) |
1<<31 |
(取得long long int的最小值) |
1<<63 |
(long long)int a,b; (a+b)/2; |
(long long)int a,b; ((a^b)>>1)+(a&b); |
Java
(类似)x=x*10 |
x=(x<<1)+(x<<3) |
x/=2 |
x>>=1 |
(long long)int a,b,c; c=a;a=b;b=c; |
(long long)int a,b; a^=b;b^=a;a^=b |
x*=2n |
x<<=n |
x/=2n |
x>>=n |
int a; if(a<0) a=-a; |
int a; a=(a^(a>>31))-(a>>31); |
long long int a; if(a<0) a=-a; |
long long int a; a=(a^(a>>63))-(a>>63); |
(取得int的最大值) |
(1<<31)-1 |
(取得long long int的最大值) |
(1<<63)-1 |
(取得int的最小值) |
1<<31 |
(取得long long int的最小值) |
1<<63 |
(long long)int a,b; (a+b)/2; |
(long long)int a,b; ((a^b)>>1)+(a&b); |
(需要注意的是,Java的一大特点是取消了程序员直接操作指针)