如果我的模块化部门是正确的; 1 / 5 mod 11 = 9
。有人可以证实这一点吗?
然而,在Java中; 1 / 5 % 11 = 0;
我不确定这里发生了什么,是我的语法,我是否需要将其括起来?
我现在感到困惑:)
有人可以建议吗?
由于
答案 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
类而不是内置基元。