国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java長整除問題淺談

2019-11-26 15:53:10
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

public class Change{
 public static void main(String args[]){
final long L1=24* 60 * 60 * 1000 * 1000;
final long L2=24* 60 * 60 * 1000;
System.out.println(L1/L2);
 }
}
/**
*   output: 5
*/ 

為什么輸出的是5呢?

再看下面的代碼輸出:

復制代碼 代碼如下:

public class Change{
 public static void main(String args[]){
final long L1=24L* 60 * 60 * 1000 * 1000;
final long L2=24L* 60 * 60 * 1000;
System.out.println(L1/L2);
 }
}
/**
*   output: 1000
*/

這個的輸出才是我們想要的結果。到底發生了什么?

      這是因為常數L1的計算“確實”溢出了。盡管計算的結果適合放入long中,并且其空間還有富余,但這個結果并不適合放入int中。這個計算完全是以int運算來執行的,并且只有在運算完成之后,其結果才被提升到long,而此時已經太遲了:計算已經溢出了,它返回的是一個小了200倍的數值。從int到long是一種拓寬原始類型轉換,它保留了(不正確的)數值。這個值之后被L2整除,而L2的計算是正確的,因為它適合int運算。這樣整除的結果就得到了5。

      那為什么是int運算來執行的呢?因為所有乘在一起的因子都是int數值。當你將兩個int數值相乘時,你將得到另一個int數值。java不具有目標確定類型的特性,只是一種語言特性,其含義是指存儲結果的變量的類型會影響到計算所使用的類型。

     通過使用long常量來替代int常量作為每一個乘積的第一個因子,就可以很容易的訂正這個程序。

     這個教訓很簡單:當你在操作很大的數字時,千萬要提防溢出,即使用來保存結果的變量已顯得足夠大,也并不意味著產生結果的計算具有正確的類型。當你拿不準時,就使用long運算來執行整個計算。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘洛县| 泾源县| 涞源县| 雷波县| 东明县| 阿拉善盟| 桑日县| 建水县| 长葛市| 惠水县| 龙口市| 小金县| 门源| 六安市| 高邮市| 金川县| 宁明县| 许昌市| 饶阳县| 晋宁县| 双峰县| 都昌县| 阿克| 武宣县| 印江| 洛宁县| 松原市| 北京市| 平昌县| 华亭县| 资溪县| 本溪| 泽州县| 万全县| 铁岭县| 康平县| 历史| 溧水县| 玛多县| 松江区| 即墨市|