今天看到一个有意思的题目:
爱立信面试题:
已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。
腾讯面试题:
请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
看到网友的答案:
int getMax2(int a,int b)
{
int t = (a+b + fabs(a-b))/2;
return t;
}
int getMax3(int a,int b)
{
int arr[] = {a,b};
int c = a<b;
return arr[c];
}
这两种方法:
第一个有网友对 fabs 不太赞同,有判断的嫌疑。
第二个使用了小于号 <
自己想了一个笨的方法:
int getMax1(int a,int b)
{
return ((a/b)*a + (b/a)*b) / (a/b + b/a);
}
还看到一个大神的写法:
int getMax4(int a,int b)
{
int c=-((b-a)>>31);//由系统决定,右移补符号位则要有负号,补0则不需要
return c*a+(1-c)*b;
}