您的位置:首页 > 其它

小心a>b和a-b>0的关系

2016-07-26 10:11 197 查看
在数学中,a>b和a-b>0这两个式子是等价的,但在计算机中,它们没有任何关系:

如果a>b,那么a-b>0吗?显然不是,举个例子:

int a = Integer.MAX_VALUE;
int b = -1;
System.out.println(a > b);
System.out.println(a - b);
反过来,如果a-b>0,那么a>b吗?也不是,举个例子:

int a = Integer.MIN_VALUE;
int b = 1;
System.out.println(a > b);
System.out.println(a - b);
因此,a>b和a-b>0并没有关系,同理,a<b和a-b<0也没有关系。

在编程中,经常出现的一些问题,举个例子:

int c = a > b ? a - b : 0;
int d = Math.max(0, a - b);
c和d的输出相等吗,可能吧!举个例子:

int a = Integer.MIN_VALUE;
int b = 1;
int c = a > b ? a - b : 0;
int d = Math.max(0, a - b);
System.out.println("c = " + c);
System.out.println("d = " + d);


另一个就是Comparator和Comparable中,以前,我以为:

(x < y) ? -1 : ((x == y) ? 0 : 1)
这句话太麻烦了,简写为x-y,虽然没遇到什么问题,但是现在看来是有问题的,

以后千万不能直接x-y了,注意越界啊,笨蛋!

总结一句话:

先比较,再计算。

千万不能计算后再比较,因为计算后可能越界了,再比较就失真了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: