积极的划分,Java的负面结果

时间:2014-06-17 17:21:23

标签: java overflow division

我真的对此感到困惑。我正在划分两个正数并得到否定结果(我正在使用Java)。

long hour = 92233720368L / (3600 * 1000000 );

我的结果是-132。

但如果我把它们分成两个长数字,我得到了正确的结果:

long hour1 = 92233720368L / (3600000000L ); 

然后我得到结果:25

我想知道为什么会这样......

提前谢谢! :)

2 个答案:

答案 0 :(得分:5)

您必须在L3600末尾添加1000000

示例:

long hour = 92233720368L / (3600 * 1000000L );

以下是什么:

System.out.println(3600 * 1000000); // Gives -694967296 because it exceeds the max limit of an integer size. So 92233720368L / -694967296 = -132

这正是你所在部门发生的事情,支配者是一个整数,因为我上面提到的原因被认为是负数。因此,为了考虑long类型的乘法结果,您应该在L后或3600之后添加1000000

答案 1 :(得分:2)

它将3600和10000000解释为类型int,它无法保存足够的信息来表示其产品,因此您可以获得不同的数字。您必须将它们都声明为类型long以获得正确的结果。