首页 > 代码库 > 【java解惑】长整数计算防止溢出
【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解惑】长整数计算防止溢出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。