2015-05-01 70 views

回答

4

只需將L添加到100016777216(或兩者)......並且這樣做就可以實現。

的原因,就像說Rod_Algonquin,它的整數值的積極的溢出,當你通過167772161000,它的發生; (最大允許數)Integer.MAX_VALUE,因此它會從Integer.MIN_VALUE開始(在您的情況下,值將爲-402653184;將它除以4890,您將得到意想不到的結果-82342)。

看一看(注意黃色突出顯示部分,IDEA會提醒你在表達數值上溢):

enter image description here

+0

可能是正確的,但OP可能不知道爲什麼。 –

+0

感謝您的解釋我認爲可能會有溢出,但我不明白的負面結果 –

1

正如@Rod_Algonquin指出,1000*16777216超過intrangeint取值在-2 到2 - 1),所以它會導致溢出。

爲了防止溢出情況發生,你可以通過添加字母L數量文字後,像下面的執行使用long計算:

1000L * 16777216/4890 

默認情況下,1000是Java中的int文字,而1000L是一個long文字。

1

首先注意到它是整數算術。無論什麼中間計算將被存儲爲整數。 1000*16777216將給出16777216000超出整數範圍。 所以現在系統嘗試runtime.As 16777216000期間管理過流這個整數>Integer.MAX_VALUE現在它移動的負範圍值的處理溢出..

嘗試這樣Integer.MAX_VALUE + 1會給你-2147483648 .Better的方式來管理這是使用long原語,或者您可以使用double作爲浮點值。

相關問題