2011-05-07 72 views
2

你好我有一些关于java的问题,为什么下面的代码返回奇怪的值?java的奇怪行为

System.out.println("Strange " + (20 * 232792560)/20); 

为什么我会收到18044195

回答

5

因为(20 * 232792560)溢出的int的范围内,并包装轮数范围多次成为360883904。然后除以20给你看到的结果。

如果你想正确的结果,那么你需要做的:

System.out.println("Strange " + (20 * 232792560L)/20); 

(标记与L字面意思是恒定的数学将与long来完成,而不是int,因此这将不再溢出)

0

因为20 * 232792560不适合4个字节(整数值)。

所以你有:

20 * 232792560 = 360883904; // because of int overflow 
360883904/20 = 18044195; 
1

因为(20 * 232792560)将执行基于整数乘法,其结果显然是出int的范围,因此该值将被截断。

+3

我不会说这是“明显的”,但... – skaffman 2011-05-07 13:56:26

+0

呃,是的。我刚刚看到它并没有溢出很多。 – asgs 2011-05-07 13:59:48