不用任何判断语句和比较操作,返回两个数的最大值
(主要讲没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;
}