整数 m % n 的符号由什么决定?
在Python中,取模运算让人感到困惑。
在Python里,%
这个符号是用来计算余数的:
>>> 9 % 5
4
但是:
>>> -9 % 5
1
为什么结果是1
而不是-4
呢?
5 个回答
3
这其实跟Python是怎么处理整数除法有关。
从数学上讲,对于任何整数x和y,以下关系总是成立:
x == (x // y) * y + x % y
所以我们可以说:
x % y == x - (x // y) * y
现在要记住,Python在进行整数除法时,是向负无穷方向取整,而不是向零取整。举个例子,-9 // 5的结果是-2,而不是-1。根据这个逻辑,你可以得出-9 % 5 = 1。
5
-10 % 5 等于 0,也就是说,-10 可以被 5 整除。
你可能会问,为什么 -9 % 5 不是 -4,答案是 -4 和 1 都可以是正确的答案,这取决于 -9 除以 5 的结果。当然,-9 除以 5 是 1.8,但这里我们讨论的是整数除法,在 Python 3 中用 // 表示,所以我在这里也用 // 来明确我们在说的是整数除法。
为了更好理解,我先不使用负数,这样更简单。
9 // 5 等于 1。也就是说,你从 9 中减去 5 只能减一次,剩下的是 4。但如果你再从 9 中减去 5 一次,剩下的就变成 -1 了!
所以,如果 9 // 5 是 2,那么 -1 是 9 % 5 的一个正确答案。
在 Python 中,9 // 5 是 1,因为 Python 的整数除法是向下取整的,也就是说,它总是向下舍入。如果它是向上舍入的话,9 // 5 就会是 2,而 9 % 5 就会是 -1。
现在我们来看负数的情况:-9 除以 5 现在是 -2。因为这是向下取整,所以它总是向下舍入。这意味着剩下的是 1。所以 -9 % 5 是 1,而不是 -4。
14