【其他】位運算優化
寫在前面:
整理出來的一些能顯著提高效能的位運算優化方法
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的一大特點是取消了程式設計師直接操作指標)