2011-05-07 105 views
2

你好我有一些關於java的問題,爲什麼下面的代碼返回奇怪的值?java的奇怪行爲

System.out.println("Strange " + (20 * 232792560)/20); 

爲什麼我會收到18044195

回答

5

因爲(20 * 232792560)溢出的int的範圍內,幷包裝輪數範圍多次成爲360883904。然後除以20給你看到的結果。

如果你想正確的結果,那麼你需要做的:

System.out.println("Strange " + (20 * 232792560L)/20); 

(標記與L字面意思是恆定的數學將與long來完成,而不是int,因此這將不再溢出)

0

因爲20 * 232792560不適合4個字節(整數值)。

所以你有:

20 * 232792560 = 360883904; // because of int overflow 
360883904/20 = 18044195; 
1

因爲(20 * 232792560)將執行基於整數乘法,其結果顯然是出int的範圍,因此該值將被截斷。

+3

我不會說這是「明顯的」,但... – skaffman 2011-05-07 13:56:26

+0

呃,是的。我剛剛看到它並沒有溢出很多。 – asgs 2011-05-07 13:59:48