【发布时间】:2013-07-01 22:33:06
【问题描述】:
在早期的课程中,我被教导 n % d = r 并将其视为 n = d*q + r,其中 d 是除数,q 是商,r 是余数(注意余数永远不能是负数)。
例如,-111 mod 11 是 10,因为 -111 = -11*-11 + 10(与 -111 = -11*10 -1 相反,看看这会给我们带来负余数)。
但是,当打印-111 % 11 的结果时,-1 是结果而不是10。为什么?这在技术上不是错误的吗?
【问题讨论】:
-
啊,旧的负操作数模数 :-) 我记得 Python 在所有特殊情况下都正确(在数学意义上)。
-
如果你想强制 C 的 '%' 操作符变成一个你期望的模数,只需这样做:
((a % b) + b) % b -
在模运算的维基百科页面上有一个很好的表格,显示了每种语言如何有自己的模实现:en.wikipedia.org/wiki/Modulo_operation
-
余浩的答案在我看来应该标记为答案,但值得注意的是,其他语言可能会有所不同。 Ada 有两个独立的函数:余数函数和模函数。当使用模运算符时,Python 处理负数的方式也不同。