负数的模运算 - 奇怪吗?

18 投票
12 回答
12545 浏览
提问于 2025-04-11 09:16

你能告诉我 (-2) % 5 的结果是多少吗?根据我的Python解释器,结果是3,但你能给我一个明白的解释吗?

我听说在某些编程语言中,结果可能会依赖于机器,但我不太确定。

12 个回答

14

你的Python解释器是正确的。 一种(比较笨的方法)计算余数的方法是不断地减去或加上这个余数,直到最后的结果在0到(余数-1)之间。

比如: 13 除以 5 的余数 = (13 - 5) 的余数 = (13 - 10) 的余数 = 3

或者在你的例子中: -2 除以 5 的余数 = (-2 + 5) 的余数 = 3

14

负数的取模运算结果似乎跟编程语言有关,不同的编程语言可能会有不同的表现。你可以在这个链接查看详细信息:http://en.wikipedia.org/wiki/Modulo_operation

16

顺便说一下:大多数编程语言会和Python的结果不同,给出-2。这取决于对取模运算的理解,这样的结果也是正确的。不过,大家普遍认可的数学定义是,ab的取模是a除以b的余数r,而且这个余数r必须是严格大于零的。更准确地说,根据定义,0 <= r < b

撰写回答