Long型整数,缄默溢出
/**
- 长整数问题
- @author husky
/
public class LongDemo {
public static void main(String[] args) {
/*
* 问题3:长整数
/
//计算一天的微妙数
Long microsBefore = (long) (24606010001000);
//计算一天的毫秒数
Long millisBefore = (long) (2460601000);
//我们想要的结果是1000
//结果为5
System.out.println("before: " + microsBefore/millisBefore);
/**
* 解析:
* 计算毫秒数时因为在int的表示范围内,可以正确的表示。
* 但是,计算微秒数的时候采用的int进行的计算,然后才转型,对于超过int表示范围的结果,产生缄默溢出
* java支持自动的向上转型,但在享受这种便利的时候一定要注意缄默溢出的情况。
*/
System.out.println("microsBefore: " + microsBefore);
System.out.println("millisBefore: " + millisBefore);
/**
* 解决:
* 在使用长整数的时候,进行类型上面的转型的情况的时候在第一个操作数后面显示的标明为long型
* eg: Long microsBefore = (long) (24L*60*60*1000*1000);
* 即使可能表示的结果是正确的情况下,显示的标明也是一种好的习惯
*/
//计算一天的微妙数
Long microsAfter = (long) (24L*60*60*1000*1000);
//计算一天的毫秒数
Long millisAfter = (long) (24L*60*60*1000);
//我们想要的结果是1000
//结果为5
System.out.println("after: " + microsAfter/millisAfter);
System.out.println("microsAfter: " + microsAfter);
System.out.println("millisAfter: " + millisAfter);
}
}