【其他】位运算优化

 写在前面:

  整理出来的一些能显著提高性能的位运算优化方法

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的一大特点是取消了程序员直接操作指针)

猜你喜欢

转载自www.cnblogs.com/Antigonae/p/10147058.html
今日推荐