国产探花免费观看_亚洲丰满少妇自慰呻吟_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運算來執行整個計算。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柘城县| 高雄市| 镇原县| 崇仁县| 内黄县| 正蓝旗| 克拉玛依市| 榆林市| 瑞安市| 仁怀市| 游戏| 新巴尔虎右旗| 武安市| 那坡县| 洞口县| 炎陵县| 峡江县| 酉阳| 大英县| 砚山县| 江津市| 平塘县| 永清县| 丁青县| 绥棱县| 灵山县| 枣强县| 和田市| 嵊州市| 罗山县| 龙江县| 阿拉善右旗| 乐都县| 刚察县| 凉山| 黔南| 中江县| 北票市| 祥云县| 普洱| 眉山市|