小心a>b和a-b>0的关系
2016-07-26 10:11
197 查看
在数学中,a>b和a-b>0这两个式子是等价的,但在计算机中,它们没有任何关系:
如果a>b,那么a-b>0吗?显然不是,举个例子:
在编程中,经常出现的一些问题,举个例子:
另一个就是Comparator和Comparable中,以前,我以为:
以后千万不能直接x-y了,注意越界啊,笨蛋!
总结一句话:
先比较,再计算。
千万不能计算后再比较,因为计算后可能越界了,再比较就失真了。
如果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了,注意越界啊,笨蛋!
总结一句话:
先比较,再计算。
千万不能计算后再比较,因为计算后可能越界了,再比较就失真了。
相关文章推荐
- Oracle用户的创建及权限设置
- Maven仓库的使用
- UVA - 1610 - Party Games(模拟or枚举)
- MongoDB Replica set + sharding
- MySQL用变量的方法添加伪序号列
- 《Android开发艺术探索读书笔记一》
- PHP 读取/导出 CSV文件
- iOS: 如何调节UITabbarItem的图片和文字位置
- Chrome 控制台console的用法
- 获取微信公众号一键关注链接
- 解决问题的思路(如故事版里面有东西,却不见了)(swift里面开发比较多)
- 谈谈对spring的理解
- Exchange 2013的邮件队列中存在大量的InboundProxy@contoso.com邮件原因
- 按照某一列统计数据
- 为a标签设置行宽高无效?
- vim相关文章整理
- 【HDU】1087 - Super Jumping! Jumping! Jumping!(dp)
- POJ1422
- Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?
- Do not concatenate text displayed with setText. Use resource string with placeholders. 提示