[英]strange behaviour of the 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)
將執行基於整數的乘法,並且結果顯然超出int
的范圍,因此該值將被截斷。
因為20 * 232792560
不適合4個字節(整數值)。
所以你得到:
20 * 232792560 = 360883904; // because of int overflow
360883904 / 20 = 18044195;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.