你好我有一些关于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