//不用任何比较判断找出两个数中较大的数
public class TwoNumWithoutJudge{
//判断一个数的符号(返回0负数,1为正数)
public static int GetSign(int x)
{
return ((x>>31)^1)&1;
}
//方法1 (局限性前提a与b不相等,可能溢出)
public static int GetMax01(int a,int b)
{
int c=a-b;
int d=b-a;
int C=GetSign(c);
int D=GetSign(d);
return C*a+D*b;
}
//异或运算
public static int GetFlip(int n)
{
return n^1;
}
//获得一个数的符号(1为正数,0为负数)
public static int sign(int n)
{
return ((n>>31)&1)^1;
}
//方法2
public static int GetMax02(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=GetFlip(difsab);
int RetrunA=difsab*sa+sameSab*sc;
int RetrunB=GetFlip(RetrunA);
return a*RetrunA+b*RetrunB;
}
public static void main(String[]args)
{
//System.out.println("Hello");
int a =100;
int b=120;
System.out.println(GetMax01(a,b));
System.out.println(GetMax02(a,b));
}
}
不用任何比较判断找出两个数中较大的数
最新推荐文章于 2020-05-19 09:47:55 发布