码迷,mamicode.com
首页 > 编程语言 > 详细

【java解惑】长整数计算防止溢出

时间:2014-12-16 19:23:03      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:java 溢出


    如下代码:

public class Example003 {

	public static void main(String[] args) {
		final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
		final long MICROS_PER_DAY_L1 = 24 * 60 * 60 * 1000 * 1000L;
		final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
		System.out.println("NO L Print:" + MICROS_PER_DAY / MILLIS_PER_DAY); //输出1
		System.out.println("Has L Print:" +MICROS_PER_DAY_L1 / MILLIS_PER_DAY); //输出2
	}
}

    输出结果:

NO L Print:5
Has L Print:1000


    原因分析:

    输出1和2的结果不一致的原因是计算溢出。由于MICROS_PER_DAY中所有乘起来的因子都是int,当两个int相乘时得到的结果也是int,所以MICROS_PER_DAY的计算结果是int,计算完成后(溢出)再赋值给long类型的MICROS_PER_DAY,MICROS_PER_DAY获取的是一个溢出后部分值;MICROS_PER_DAY_L1被当做一个long类型计算,计算的结果也是long,不产生溢出。所以,在操作大数字时,一定是注意溢出问题。一般在计算时,就使用long来执行。也就是在计算的因子中显式地标准数字类型。




本文出自 “winger” 博客,谢绝转载!

【java解惑】长整数计算防止溢出

标签:java 溢出

原文地址:http://imu2008.blog.51cto.com/3844842/1590791

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!