题目:
两个数 不能用判断 条件
区分出大小
解答一:
代码:
void compare(int a, int b)
{
static char op[] = { '=', '<', '>' };
int i = (unsigned(a-b)>>31)+(unsigned(b-a)>>31)*2;
printf("%d %c %d/n", a, op[i], b);
}
int _tmain(int , _TCHAR* [])
{
compare(100, 200);
compare(100, -100);
compare(100, 100);
return 0;
}
输出:
100 < 200
100 > -100
100 = 100
解答二:
WORDBITS,程序的位数,一般是32,因为现在基本上都是32位的程序.
min = a+(((b-a)>>(WORDBITS-1))&(b-a))
max = a-(((a-b)>>(WORDBITS-1))&(a-b))
解答三:
大的一个数是: ((a+b)+abs(a-b))/2
小的一个是: ((a+b)-abs(a-b))/2