zoukankan      html  css  js  c++  java
  • Java长整形

    话说有这样一个小例子:
    MICROS_PER_DAY表示一天的微秒数
    MILLIS_PER_DAY表示一天的毫秒数
    然后下面例子的结果是多少呢?

    1 public class Test3 {
    2     public static void main(String[] args) {
    3         final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
    4         final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
    5         System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
    6     }
    7 }

    So easy
    数据类型为 long ,很容易保存这两个乘积不产生溢出.
    因此,结果肯定是 1000!

    but….. 结果是:数据溢出!!!

    但是但是long能表示 -2的63次方到2的63次方-1的整数.
    数都数不过来,怎么会溢出?
    小心陷阱啊,虽然我们定义的是long类型,
    准确的说最终的结果应该是long类型的.

    我们看看表达式右边,
    24 * 60 * 60 * 1000 * 1000
    这个表达式是以int类型作为运算的,
    intint类型相乘,结果还是int类型,
    最终结果超过int所能保存的范围,所以数据溢出了,
    然后才被long所保存;

    改进
     

    24 * 60 * 60 * 1000 * 1000–>24L * 60 * 60 * 1000 * 1000


    在表达式随便哪个数值后面加上一个l或者L就搞定了,
    其结果会自动转换为long而不是int了,然后再保存到long类型变量中.

    很简单

    原文地址:http://blog.csdn.net/CodeAi/article/details/46704777?locationNum=8&fps=1

  • 相关阅读:
    半夜的时候,干了个活,反了个小软件
    bzoj2243[SDOI2011]染色
    bzoj4034[HAOI2015]T2
    bzoj2661[BeiJing wc2012]连连看
    bzoj1406[AHOI2007]密码箱
    bzoj1452[JSOI2009]Count
    bzoj1934[Shoi2007]Vote 善意的投票
    bzoj1787[Ahoi2008]Meet 紧急集合&bzoj1832[AHOI2008]聚会
    bzoj1293[SCOI2009]生日礼物
    bzoj1221[HNOI2001] 软件开发
  • 原文地址:https://www.cnblogs.com/tianxxl/p/8040403.html
Copyright © 2011-2022 走看看