要求:
不能使用 if、for、while、?:() 或其他任何带有判断性质的语句。不能使用内部实现有判断语句的函数。
写一个函数,max(int a, int b)返回a、b中较大的一个。不能用( abs(a+b) + abs(a-b) ) * 0.5,据说abs函数中也使用了 if 语句。
ALNG's solution:
// 如果 i >= 0 返回0。否则返回1。
inline int signof(int i)
{
return unsigned(i) >> (sizeof(int) * 8 - 1);
}
int max(int a, int b)
{
int p[2];
p[0] = a;
p[1] = b;
return p[signof(a - b)];
}