23 % -5 = -2
23 % 5 = 3
有人可以向我解释一下我如何理解这一点,因为我明天要考试。我想说它,因为-5 * -5 =25
那25 -2 = 23
是他们获得23
. 这个对吗?
在 Python 中,余数的符号与分母的符号相同(这与 C 等语言不同,后者与分子的符号相同)。
从数学上讲,你总是可以保证如果a, b = divmod(n, d)
,那么a*d + b == n
。
注意23//5 == 4
and 23//-5 == -5
(Python 总是做地板除法)。因此,正如您所说,我们有4*5 + 3 == 23
和。-5*-5 - 2 == 23
为您的目的查看问题的最简单方法是考虑以下定义:
a mod n = R 其中余数 R 必须满足 0<= R
因此,对于 mod -5 算术,0<= R < -4 即 R 可以是 0、-1、-2、-3、-4 之一
也就是说,您有效地从 a 中减去(或添加)n,直到将 R 带入上述范围:
所以
23 % 5 是 (23-4*5) = 23-20 = 3
但
23 % -5 是 (23+5*(-5)) = 23-25 = -2
嗯,23 % 5 = 3,因为 4*5 = 20,当你将 23 除以 20 时,你得到的余数是 3。你可以把它想象成你可以不用翻的壁橱。
至于 23 % -5,这个答案因一种编程语言而异。
对于 Python,它是 -2,因为它总是返回除数的值,这是因为 5*5 = 25,当你在 Python 中将 23 除以 25 时,你会得到 -2 的余数(因为它必须是负数,因为除数是负数) 所以我们有 25 - 2 = 23。
值得注意的是,正式的数学定义表明 b 是一个正整数。
% 在 Python 中使用“模运算”;这与这样提醒除法操作不同。
a - int(a/n) * n
尽管它有时在某些计算机语言中是等价的。
数学表达式可以在这里找到:http ://en.wikipedia.org/wiki/Modulo_operation
所以很明显,在 Python 中“%”操作使用了下面的表达式:
mod(a, n) = a - n * floor(a / n)
所以,
23%-5 = mod(23,-5) = 23 - (-5) * floor(23/-5) = 23 - (-5) * -5 = -2
和
23%5 = mod(23, 5) = 23 - 5 * 地板(23/5) = 23 - 5 * 4 = 3
另外,你觉得有趣的是
-23%5 = mod(-23,5) = (-23) - 5 * floor(-23/5) = -23 - 5 * (-5) = 2
因为 floor() 动作将使整数值趋向负无穷大。
让我们把它写成 N=kM+R。
我们有 23 = -5*(-5) - 2 和 23 = 4*5 + 3。