%
运算符在 Python 中到底是如何工作的,特别是在涉及负数时?
例如,为什么
-5 % 4
求值为
3
,而不是
-1
?
在 Python 中,模运算符 (
%
) 遵循以下规则:
a % b = a - (b * floor(a / b))
其中:
- a 是被除数。
- b 是除数。
- floor(a / b) 是小于或等于 a/b 的最大整数。
这意味着模运算的结果的符号与 除数 (b) 的符号相同。
在的例子中:
- a = -5
-
b = 4
-
a / b = -5 / 4 = -1.25
- floor(-1.25) = -2 (小于或等于 -1.25 的最大整数)
- a - (b * floor(a / b)) = -5 - (4 * -2) = -5 + 8 = 3
因此, -5 % 4 = 3
Python 的模运算符返回除以除数后得到的“正余数”。换句话说,它始终找到一个值,使以下条件成立:
- (商 * 除数) + 余数 = 被除数
- 余数的符号与除数相同。
即使被除数是负数,此规则也适用。这就是为什么会得到正余数 3 而不是 -1 的原因。
其他编程语言可能会以不同的方式处理模运算,其中一些语言会返回负余数以用于负被除数。但是 Python 的方法在处理诸如模算术和循环(其中需要一致行为)等概念时保持一致性并提供有用的特性。
标签:python,modulo,negative-number From: 3883004