你好我对java有一些疑问,为什么以下代码返回奇怪的值?
System.out.println("Strange " + (20 * 232792560)/20);
为什么我会收到18044195
?
答案 0 :(得分:5)
因为(20 * 232792560)
溢出了int
的范围,并且在数字范围内多次换行成为360883904
。然后将其除以20
,以便为您提供结果。
如果您想要正确的结果,那么您需要这样做:
System.out.println("Strange " + (20 * 232792560L) / 20);
(使用L
标记文字意味着常数数学将使用long
,而不是int
,因此不会再溢出。)
答案 1 :(得分:1)
因为(20 * 232792560)
将执行基于整数的乘法,结果明显超出int
的范围,因此该值将被截断。
答案 2 :(得分:0)
因为20 * 232792560
不适合4个字节(整数值)。
所以你得到了:
20 * 232792560 = 360883904; // because of int overflow
360883904 / 20 = 18044195;