位运算的应用

  • 求浮点数的绝对值
double abs(double y)
{
double x = y;
*(((int *) &x) + 1) &= 0x7fffffff;
return x;
}
  • 整数的平均值

      对于两个整数x,y,如果用 (x+y)/2 求平均值,会产生溢出,因为 x+y 可能会大于INT_MAX,但是我们知道它们的平均值是肯定不会溢出的,我们用如下算法:

#define AVE(x,y) ((x)&(y))+(((x)^(y))>>1)
  • 判断一个整数是不是2的幂

     对于一个数 x >= 0,判断他是不是2的幂 :

#define POWER(x) ((((x)&((x)-1))==0)&&((x)!=0))
  • 不用temp交换两个整数(没啥用)

int x,y;
void swap(int &x , int &y)
{
x
^= y;
y
^= x;
x
^= y;
}
  • 当length=2^n时,hashcode & (length-1) == hashcode % length。应用在JDK的HashMap中:文章地址
原文地址:https://www.cnblogs.com/codingmylife/p/1679324.html