对于两个32位整数a和b,请设计一个算法返回a和b中较大的。但是不能用任何比较判断。若两数相同,返回任意一个。
给定两个整数a和b,请返回较大的数。
测试样例:
1,2
返回:2
思路:用异或的办法,先用>>31来得到符号位,a-b>0 则表示为1
代码如下:
public static void main(String[] args) {
System.out.println(AheBbuxuyaopanduan.panduan(2, 1));
}
public static int panduan(int a,int b){
int c = a - b ;
int scA = sign(c);
int scB = flip(scA);
return (a*scA + b*scB);
}
public static int flip(int n){
return (n^1);
}
public static int sign(int n){
return flip(((n>>31)&1));
}