繁体   English   中英

Java的奇怪行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM