原文地址:http://blog.youkuaiyun.com/hairetz/article/details/4266445
题目是:已知2个整形数据a、b,不使用 if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。首先看看原文作者给出自己的代码,如下:
//code1
void main()
{
int a=6,b=5;
int d[2]={b,a},c=(a>b);
cout<<d[c];
}
我感觉作者用到了大于符号 '>'已经不满足题意了,下面的回复6楼中有人给出了其它办法,代码如下:
//code2
int max(int a,int b)
{
return (a+b+abs(a-b))/2;
}
虽然回帖的很多人觉得这个是正解,但我个人觉得也是不满足题意的,很明显整数绝对值的函数实现是下面这样(glibc实现):
int
abs (int i)
{
return i < 0 ? -i : i;//这里能够满足要求么?
}
为什么我觉得code2也不行呢,如果调用个code2都能行的话,我随便写个函数比如:
int getMaxNum(int x,int y)
{
if (x>y)
{
return x;
}
else
{
return y;
}
}
int max(int a,int b)
{
return getMaxNum(a,b);
}
肯定也满足题意要求的,而我用到了 if语句 。我的思路是int数据a、b加减法,其结果无非就是正数、0、负数,数据存储方式不是有符号位么,用这个判断就行了,代码如下:
//code3
#define MASK (1<<31)
int getMaxNum(int a,int b)
{
int temp=a-b;
return temp & MASK;
}
其次,如果a、b差值再边界上,code3也是不完善的,还需要改进!
希望那位朋友有更好的办法!