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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM