/**
* Created by lxw, liwei4939@126.com on 2017/11/2.
* 不用任何比较判断找出两个数中较大的
* 给定两个32位整数a和b,返回较大的数
*/
public class getMax {
//取反操作
public int flip(int n){
return n^1;
}
//符号函数
public int sign(int n){
return flip((n>>31) & 1);
}
// a-b的值可能会溢出
public int getMax1(int a, int b){
int c= a - b;
int scA =sign(c);
int scB = flip(scA);
return a * scA + b * scB;
}
// 不用考虑a-b的值会不会溢出
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 = flip(difSab);
int returnA = difSab * sa + sameSab * sc;
int returnB = flip(returnA);
return a * returnA + b * returnB;
}
}
/** * Created by lxw, liwei4939@126.com on 2017/11/2. * 不用任何比较判断找出两个数中较大的 * 给定两个32位整数a和b,返回较大的数 */public class getMax { //取反操作 public int flip(int n){ return n^1; } //符号