`

JAVA解惑之—长整除

阅读更多

我们先来看一个短小的程序:

public class LongDivison{

     public static void main(String[ ] args){

          final long millise_per_day  = 24*60*60*1000;

          final long micros_per_day = 24*60*60*1000*1000;

          System.out.println(micros_per_day / millise_per_day);

     }   

 

}

 

其实millise_per_day表示一天中的毫秒数,micros_per_day表示一天中的微妙数,初看结果输出结果应该是1000,但是本程序的结果是5,为什么呢?也许有人会想是因为值太大了超出了long型所能表示的数,但是其实不然,原来JAVA中是首先把micro_per_day的数值计算出来,(注意结果是int型,因为24,60等的数字都是int型的),结果是int型的,已经溢出了,然后再把int型提升为了long型,此时micros_per_day已经比真实值小了200倍,所以结果也是5。正确的写法应该如下:

public class LongDivison{

     public static void main(String[ ] args){

          final long millise_per_day  = 24L*60*60*1000;

          final long micros_per_day = 24L*60*60*1000*1000;

          System.out.println(micros_per_day / millise_per_day);

     }   

 

}

分享到:
评论
1 楼 Tech-Dragon 2007-06-08  
无语 

相关推荐

Global site tag (gtag.js) - Google Analytics