Python中的负数模数

时间:2012-09-28 01:52:28

标签: python modulus

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

有人可以向我解释我是如何理解这一点的,因为明天我会参加考试。我想说的是因为-5 * -5 =25然后是25 -2 = 23,这就是他们获得23的方式。这是对的吗?

5 个答案:

答案 0 :(得分:5)

在Python中,余数的符号与分母的符号相同(它与C之类的语言不同,它与分子的符号相同< / em>的)。

从数学上讲,如果a, b = divmod(n, d),则为a*d + b == n,我们始终保证您。{/ p>

请注意23//5 == 423//-5 == -5(Python总是进行分区划分)。因此,正如您所说,我们有4*5 + 3 == 23-5*-5 - 2 == 23

答案 1 :(得分:0)

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

我们有23 = -5 *( - 5) - 2,并且23 = 4 * 5 + 3。

答案 2 :(得分:0)

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

a mod n = R其中余数R必须满足0 <= R.

因此,对于mod -5算术,0 <= R&lt; -4,即R可以是0,-1,-2,-3,-4中的一个

你可以有效地减去(或添加)n,直到你把R带到上面的范围:

所以

23%5是(23-4 * 5)= 23-20 = 3

23%-5是(23 + 5 *( - 5))= 23-25 = -2

答案 3 :(得分: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是正整数。

答案 4 :(得分: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 * floor(23/5)= 23 - 5 * 4 = 3

另外,你发现有趣的是

-23%5 = mod(-23,5)=( - 23) - 5 * floor(-23/5)= -23 - 5 *( - 5)= 2

因为floor()动作将整数值朝负无穷大。