3
23 % -5 = -2
23 % 5 = 3

有人可以向我解释一下我如何理解这一点,因为我明天要考试。我想说它,因为-5 * -5 =2525 -2 = 23是他们获得23. 这个对吗?

4

5 回答 5

8

在 Python 中,余数的符号与分母的符号相同(这与 C 等语言不同,后者与分子的符号相同)。

从数学上讲,你总是可以保证如果a, b = divmod(n, d),那么a*d + b == n

注意23//5 == 4and 23//-5 == -5(Python 总是做地板除法)。因此,正如您所说,我们有4*5 + 3 == 23和。-5*-5 - 2 == 23

于 2012-09-28T02:06:28.887 回答
0

为您的目的查看问题的最简单方法是考虑以下定义:

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

于 2012-09-28T02:11:01.707 回答
0

嗯,23 % 5 = 3,因为 4*5 = 20,当你将 23 除以 20 时,你得到的余数是 3。你可以把它想象成你可以不用翻的壁橱。

至于 23 % -5,这个答案因一种编程语言而异。

对于 Python,它是 -2,因为它总是返回除数的值,这是因为 5*5 = 25,当你在 Python 中将 23 除以 25 时,你会得到 -2 的余数(因为它必须是负数,因为除数是负数) 所以我们有 25 - 2 = 23。

值得注意的是,正式的数学定义表明 b 是一个正整数。

于 2012-09-28T02:15:34.313 回答
0

% 在 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() 动作将使整数值趋向负无穷大。

于 2013-10-21T13:47:34.883 回答
0

让我们把它写成 N=kM+R。

我们有 23 = -5*(-5) - 2 和 23 = 4*5 + 3。

于 2012-09-28T02:05:03.130 回答