【问题标题】:Modulo division vs remainder division java模除法与余数除法java
【发布时间】:2016-09-11 10:03:19
【问题描述】:

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

这源于上一个问题。以下是我认为我知道的:

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

1/3 = 0
1%3 = 1

i < j 和之前的一张海报解释了它是如何工作的并指出“首先,在 Java 中,% 是余数(不是模)运算符,它的语义略有不同,我很困惑为什么 i%j = i。 ……”

他们的解释非常适合我的需要。但是,我对他们的引用感到困惑,因为我总是在数学模块化 == 余数除法中学到这一点。

如何在 JAVA 中执行模除法,在尝试使用 % 作为模运算符时是否需要注意?

【问题讨论】:

标签: java


【解决方案1】:

在数学上,模是除以余数。

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 是负数。 所以我们需要为k取-4

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

这是正确的答案。在这种情况下,只有符号是不同的,但如果你取 -15 mod 4,你会在 java 和大多数其他语言中得到 -3,但数学上正确的答案是 1 (-15 + 16)

使用java,你会得到负值。

【讨论】:

  • 模不仅是余数,如果您阅读我的回答,我 postet 7 mod 4 是 1 R3。 r3 代表 3 的余数
  • 我知道,但是 mod 操作返回余数,而不是除法的结果,所以结果只是 3。7 除以 4 将是 1,余数为 3。
【解决方案2】:

你可能对算术中的“模运算符”感到困惑,这与Java和类似语言中的%运算符相同,我认为没有“模除法”之类的东西。 java 中的% 运算符将始终返回两个数字之间重复除法的整数余数。就像在算术中一样,(i % j) = i 其中i &lt; ji &gt;= 0。运算结果小于j

【讨论】:

  • i &lt; ji &gt;= 0 的位置。只是要提一下,这对于负数是不正确的-
  • @DenisLukenich 谢谢,我已经修改了答案。
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 2012-11-21
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多