不用判断条件,取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<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;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值