你好我有一些關於java的問題,爲什麼下面的代碼返回奇怪的值?java的奇怪行爲
System.out.println("Strange " + (20 * 232792560)/20);
爲什麼我會收到18044195
?
你好我有一些關於java的問題,爲什麼下面的代碼返回奇怪的值?java的奇怪行爲
System.out.println("Strange " + (20 * 232792560)/20);
爲什麼我會收到18044195
?
因爲(20 * 232792560)
溢出的int
的範圍內,幷包裝輪數範圍多次成爲360883904
。然後除以20
給你看到的結果。
如果你想正確的結果,那麼你需要做的:
System.out.println("Strange " + (20 * 232792560L)/20);
(標記與L
字面意思是恆定的數學將與long
來完成,而不是int
,因此這將不再溢出)
因爲20 * 232792560
不適合4個字節(整數值)。
所以你有:
20 * 232792560 = 360883904; // because of int overflow
360883904/20 = 18044195;
因爲(20 * 232792560)
將執行基於整數乘法,其結果顯然是出int
的範圍,因此該值將被截斷。
我不會說這是「明顯的」,但... – skaffman 2011-05-07 13:56:26
呃,是的。我剛剛看到它並沒有溢出很多。 – asgs 2011-05-07 13:59:48