0

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

但是,在 Java 中;1 / 5 % 11 = 0;

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

我现在很困惑:)

有人可以建议吗?

谢谢

4

4 回答 4

2

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

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

1 / 5 = 0(对于整数)

0 模 11 = 0

于 2011-10-11T08:50:23.543 回答
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是相关的,但不是一回事!

于 2011-10-11T09:10:06.297 回答
-1

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

于 2011-10-11T08:51:13.630 回答
-1

这是因为运算符优先级。

Java 确实通过了它简化表达的地方。它执行一些操作,然后在下一次通过它执行一些其他操作。“最高”运算符首先完成。例如乘法在加法之前。操作员( )处于第一阶段,让您覆盖正常的事情完成顺序。

请参阅此图表:在此处输入链接描述

%*与和属于同一组/。它们是从左到右完成的。

所以你要(1/5) % 11

但是您还有另一个问题,因为这将在浮点数学中完成,因此您将得到一个近似值而不是确切的正确答案。

您需要使用BigInteger类而不是内置原语。

于 2011-10-11T09:02:02.813 回答