C语言位运算的应用
一、求绝对值
整数的绝对值
int AbsInt(int n)
{
int i = n >> 31; // if n >= 0, i = 0; else i = 0xffffffff = -1
n = n ^ i; // if i = 0, n = n; else i = 0xffffffff, n = ~n
return n - i; // if i = 0, n - i = n; else i = -1, n - i = n + 1
}
浮点数的绝对值
float AbsFloat(float flt)
{
*(size_t*)&flt = (*(size_t*)&flt & 0x7fffffff);
return flt;
}
double AbsDouble(double dbl)
{
*((size_t*)&dbl + 1) = (*((size_t*)&dbl + 1) & 0x7fffffff);
return dbl;
}