【问题标题】:The remainder obtained from division of negative number [closed]从负数除法获得的余数[关闭]
【发布时间】:2021-05-21 03:08:02
【问题描述】:

假设被除数为-4,除数为3。

根据除法定理(或除法算法),我们有 -4 = -2 * 3 + 2,因此余数是 2。

另一方面,如果我们在 java 中使用int r = (-4) % 3;,我们会得到 r = -1。我将这个结果解释为首先找到从被除数和除数的绝对值相除得到的余数,然后将被除数的符号附加到它上面。

请问我的解释是否正确?计算机究竟如何以及为什么以这种方式找到余数?如何理解这两种余数的区别?

【问题讨论】:

  • % 用于模运算。 -1 相当于 23 为模。
  • 这能回答你的问题吗? Difference between modulus and remainder
  • @ewong 不,不是。 % 是余数运算符,而不是模运算符。 JLS #15.17.3.
  • 根据“除法定理”,-4/3 是 -1,而不是 -2,因此余数是 -1。你的算术不正确。
  • @user207421 嗨,我认为“除法定理”是指elementary number theory中的除法定理

标签: java math division


【解决方案1】:

你可以写-4 = -2 * 3 + 2,也可以写-4 = -1 * 3 - 1。两者都以不同的方式有意义,并且都被不同的语言使用。 Java 选择的选项是余数的符号将左操作数的符号与除法和取模(被除数)相匹配。因为 -4 是负数,所以选择余数 -1。

您可以在 JLS 部分15.17.3 中阅读更多详细信息:

...余数运算的结果只有当被除数为负时才能为负,只有当被除数为正时才能为正。而且,结果的大小总是小于除数的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2018-12-07
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多