- 求浮点数的绝对值
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中:文章地址