Modulo分区vs剩余分区java

时间:2016-05-15 15:13:29

标签: java

我从上一个问题中学到了很多东西,希望我再也不会犯同样的错误。)

这源于之前的问题。以下是我认识的内容:

对于java中的int(我假设所有语言,但我在JAVA专门询问):

1/3 = 0
1%3 = 1

i%j = i以及前一张海报解释这是如何工作的时候,我很难过i < j,并且还说“首先,在Java中,%是余数(非模数)运算符,略有不同的语义......“

他们的解释非常适合我需要的东西。然而,我对他们的引语感到困惑,因为我总是在数学模块化= =余数除法中被教导。

如何在JAVA中执行模块划分,并且在尝试将%用作模数运算符时是否存在缺陷?

2 个答案:

答案 0 :(得分:0)

您可能会对&#34;模运算符&#34;感到困惑。在算术中,它与Java和类似语言中的%运算符相同,我不认为有&#34;模块化部门&#34;。 java中的%运算符将始终从两个数字之间的重复除法返回整数余数。就像在算术(i % j) = ii < ji >= 0一样。操作的结果小于j

答案 1 :(得分:0)

mathematicaly,modulo是与余数的划分。

7 mod 4 = 1 R3

请参阅:

n = a * m + r

Java中的模运算符(与大多数其他语言一样)只给出了余数部分而不是我不知道,如果它与负数一致正确。

详细说来,数学上模数总是正面的。这是java中模数运算符的区别。

a mod n = b, if there is a number k existing with a = b + kn
                    and 0 <= b < n 

这意味着,如果你采取-14 mod 4:

 -14 = b + k * 4    //lets take -3 for k
 -14 = b + -3 * 4
 -14 = b - 12
 -2 = b

这是错误的(数学上)因为b是否定的。 所以我们需要把-4换成k

 -14 = b + -4 * 4
 -14 = b + 16
  2 = b

这是正确的答案。在这种情况下,只有标志是差异,但如果你采取-15 mod 4,你将获得java和大多数其他语言-3,但数学上正确的答案将是1(-15 + 16)

使用java,您将获得负值。