如果我的模块化划分是正确的;1 / 5 mod 11 = 9
. 有人可以证实这一点吗?
但是,在 Java 中;1 / 5 % 11 = 0;
我不确定这里发生了什么,这是我的语法,我是否需要以某种方式将其括起来?
我现在很困惑:)
有人可以建议吗?
谢谢
这与 (1/5) mod 11 相同。
(或者与 1 / (5 mod 11) 相同,仍然是 1/5 == 0 [从左到右实际上是 (1/5) mod 11])
1 / 5 = 0(对于整数)
0 模 11 = 0
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
是相关的,但不是一回事!
http://www.difranco.net/cop2551/java_op-prec.htm表示 *、/ 和 % 具有相同的优先顺序,但在表达式中 / 将优先于 %。因此,您上面的 Java 结果在 JLS 中是正确的。
这是因为运算符优先级。
Java 确实通过了它简化表达的地方。它执行一些操作,然后在下一次通过它执行一些其他操作。“最高”运算符首先完成。例如乘法在加法之前。操作员( )
处于第一阶段,让您覆盖正常的事情完成顺序。
请参阅此图表:在此处输入链接描述
%
*
与和属于同一组/
。它们是从左到右完成的。
所以你要(1/5) % 11
但是您还有另一个问题,因为这将在浮点数学中完成,因此您将得到一个近似值而不是确切的正确答案。
您需要使用BigInteger
类而不是内置原语。