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

编写一个方法,条件是不使用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;
    }

猜你喜欢

转载自blog.csdn.net/heuguangxu/article/details/78876971
今日推荐