java谜题3:长整除
2014-04-15 16:00
330 查看
一、谜题
下面的代码中被除数表示一天的微秒数,除数表示一天的毫秒数。猜猜他的结果?final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
按照预想应该打印出1000,但是结果却是5
二、解惑
问题在于MICROS_PER_DAY的计算溢出了。尽管long类型可以存放24 * 60 * 60 * 1000 * 1000;的值,但是因为所有乘在一起的因子都是int型,所以结果是int类型,运算完成后才转化为long类型。
在运算完成时,结果溢出,得到了比实际结果小了200倍的值,所以结果是5
三、修正方案
将第一个乘积因子转为long,可以使得后续运算使用long类型来完成。final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY = 24L * 60 * 60 * 1000;
System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
当操作大数值时,一定要提防溢出。
相关文章推荐
- java解惑--谜题3:长整除
- java谜题--java运行时修改引用类的静态常量
- java__while if1000以内能被输入元素整除的数之和
- L1-046. 整除光棍【java高精度】
- 几个谜题,深入的了解java
- Java谜题3——循环谜题
- Java谜题——库谜题
- java循环练习:把100——200中不能被3整除的数输出,每四个换一行输出
- Java解惑1——表达式谜题(易混淆10处)
- Java谜题1-1奇数性
- java解惑3-循环谜题
- java 长整除问题
- Java谜题--1
- 谜题3:长整除
- Java谜题3——循环谜题
- Java谜题1-6多重转型
- Java谜题-谜题32-无限循环[Java]
- javacript 整除实现
- 1、java程序编写:求1000以内的所有质数(只能被1和本身整除)
- 日期谜题(也暴露了Java)设计中不大好的两个类库