题解 | #获取最大值#
获取最大值
https://www.nowcoder.com/practice/d2707eaf98124f1e8f1d9c18ad487f76
不用任何判断语句和比较操作,返回两个数的最大值
(主要讲没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;
}