不用任何比较判断找出两个数中较大的数。
描述:给定两个32位整数a和b,返回a和b中较大的。
方法1:得到a-b的值的符号。
局限性:如果a-b的值出现溢出,返回结果就不正确了。
public int flip(int n) {
return n^1;
}
public int sign(int n) {
return flip((n>>33)&1);
}
public int getMax1(int a, int b) {
int c = a - b;
int scA = sign(c);
int scB = flip(scA);
return a * scA + b * scB;
}
方法2:彻底解决溢出问题。
public int getMax2(int a, int b) {
int c = a - b;
int sa = sign(a);
int sb = sign(b);
int sc = sign(c);
int difSab = sa ^ sb;
int sameSab = filp(difSab);
int returnA = difSab * sa + sameSab * sc;
int returnB = flip(returnA);
return a * returnA + b * returnB;
}
来自《程序员代码面试指南》