繁体   English   中英

Python中负数的模数

[英]modulus of negative numbers in Python

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 == 423//-5 == -5 (Python始终进行地板分割)。 因此,正如您所说的,我们有4*5 + 3 == 23-5*-5 - 2 == 23

让我们将其写为N = kM + R。

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

出于您的目的考虑问题的最简单方法是考虑以下定义:

一个模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

好吧,由于4 * 5 = 20,所以23%5 = 3,然后将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)*下限(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 *地板(-23/5)= -23-5 *(-5)= 2

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM