不用判断条件,取a,b最大值

今天看到一个有意思的题目:

爱立信面试题:

已知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
这两种方法:

第一个有网友对 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;
}


你可能感兴趣的:(c语言与程序,算法)