不使用比较操作求两个数的最大数

来源:互联网 发布:apiv2.0.min.js 编辑:程序博客网 时间:2024/06/05 05:08

编写一个方法,条件是不使用if-else、?-:等判断和比较运算符

第一种方法

public int getMax(int a, int b) {        int c = a - b;        //取出a-b的符号位        c = c >> 31;        /*        如果c是负数,说明a<b,那么移位之后c表示的是-1,        那么a加上比b少的那部分就是最大值了        如果c是正数,说明a>b,那么移位之后c表示的是0,        那么直接返回a就是最大值了         */        return a + c*(a-b);    }

第二种方法

public int getMax(int a, int b) {        b = a - b;        a -= b & (b>>31);        /*        如果b是负数,说明a<b,那么移位之后b表示的是-1,        那么进行与操作后,得到的就是a比b小的那一部分,并且以负数表示        即:a = a - (a - b)        如果b是正数,说明a>b,那么移位之后b表示的是0,        那么进行与操作后,得到的就是0        即:a = a - 0         */        return a;    }
原创粉丝点击