负数的模运算 - 奇怪吗?
你能告诉我 (-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
。这取决于对取模运算的理解,这样的结果也是正确的。不过,大家普遍认可的数学定义是,a和b的取模是a除以b的余数r,而且这个余数r必须是严格大于零的。更准确地说,根据定义,0 <= r < b。