【问题标题】:Difference between modulus and remainder模数和余数之间的差异
【发布时间】:2020-01-30 20:50:30
【问题描述】:

我正在使用javapython 中的% 运算符进行一些计算。

在进行计算时,我发现% 运算符在处理负数时在两种语言中的工作方式不同。

例如

-21 % 4 = -1   // Java

-21 % 4 = 3    # Python

所以我查看了 stackoverflow 上的一些帖子,发现在 java 中,% 给出 remainder 而在 python 中,% 给出 modulus。它们对于正数是相同的,但在负数的情况下会给出不同的结果,如上例所示。

所以我搜索了模数余数之间的区别,在线阅读了一些帖子,但余数和模数之间的区别我仍然不清楚

问题

有人能用上面的例子简单地解释一下modulusremainder之间的区别吗?

【问题讨论】:

  • Python 的 6 个?我得到 3 个。
  • 抱歉,打错了。已编辑。
  • 这里的问题是,在 Python 中 % 运算符返回模数,而在 Java 中它返回余数。这些函数对正参数给出相同的值,但是对于负输入,模总是返回正结果,而余数可能给出负结果。
  • 模数始终与除数同号,余数与商同号。
  • 查看这个答案:mod and remainder

标签: java python modulus


【解决方案1】:

模运算符的实现在 Python 和 Java 等语言中是不同的。

在 Java 中,结果有被除数的符号,但在 Python 中,符号来自除数。

要在 Java 中实现 Python 的结果,您可以使用:

(((n % m) + m) % m)

其中 n 是被除数,m - 除数。

int a = (((-21% 4) + 4) % 4);
    System.out.println(a);                //a=3

【讨论】:

  • Java 中没有取模运算符。它是一个余数运算符。 JLS #15.17.3.
【解决方案2】:

CC++Java 不同,Python 的模运算符 (%) 总是返回一个与分母(除数)符号相同的数字)。

示例

(-5) % 4 = (-2 × 4 + 3) % 4 = 3.

See 了解如何确定不同语言的结果符号。)

【讨论】:

  • Java 中没有取模运算符。它是一个余数运算符。 JLS #15.17.3.
猜你喜欢
  • 2018-07-30
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2011-08-13
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多