java模块化部门理智检查

时间:2011-10-11 08:46:57

标签: java division modular

如果我的模块化部门是正确的; 1 / 5 mod 11 = 9。有人可以证实这一点吗?

然而,在Java中; 1 / 5 % 11 = 0;

我不确定这里发生了什么,是我的语法,我是否需要将其括起来?

我现在感到困惑:)

有人可以建议吗?

由于

4 个答案:

答案 0 :(得分:2)

这与(1/5)mod 11相同。

(或者与1 /(5 mod 11)相同,仍然是1/5 == 0 [从左到右它实际上是(1/5)mod 11虽然])

1/5 = 0(对于整数)

0 mod 11 = 0

答案 1 :(得分:2)

  

1/5 mod 11 = 9.有人可以确认吗?

(9 * 5)%11 = 45%11 = 1.因此,是9是“mod 11”中的模数乘法逆5。

问题是:Java只有整数而且没有模运算。在Java中,%只是一个像*这样的运算符。

来自http://en.wikipedia.org/wiki/Modular_arithmetic

  

模运算的概念相关与其余部分相关。

所以,mod 11% 11是相关的,但不是一回事!

答案 2 :(得分:-1)

http://www.difranco.net/cop2551/java_op-prec.htm表示*,/和%具有相同的优先顺序,但表达式/中的优先级高于%。因此,上面的Java结果在JLS中是正确的。

答案 3 :(得分:-1)

这是因为运营商优先。

Java确实通过了简化快递的地方。它执行一些操作,然后在下一次传递时执行其他操作。 “最高”的运营商首先完成。例如,乘法是在加法之前。操作符( )在第一遍中,让您覆盖正常的订单。

请参阅此图表:enter link description here

%*/位于同一组中。它们是从左到右完成的。

所以你想要(1/5) % 11

但是你还有另外一个问题,那就是在浮点数学中完成,所以你得到一个近似值而不是正确的答案。

您需要使用BigInteger类而不是内置基元。