不用任何判断语句和比较操作,返回两个数的最大值

(主要讲没bug的方法二)

public static int getMax2(int a, int b){

int c = a - b;

int sa = sign(a);

int sb = sign(b);

int sc = sign(c);

int diffAB = sa ^ sb;

int sameAB = diffAB ^ 1;

int returnA = diffAB * sa + sameAB * sc; (表示了所有可能a较大的情况,而且这两种表示互斥,并非代表所有情况,所以不是对立)

int returnB = returnA ^ 1;

return a * returnA + b * returnB;

}

public static int sign(int n) {

return (n >>> 31) ^ 1;

}