Python中的负数取余问题

12 % 5, -12 % 5
# output
# (2, 3)

在数学里,"负数取余"遵循的是:

如果 a 与 d 是整数,d 非零,那么余数 r 满足 a = q * d + r, q 为整数,且 0 <= |r| < |d|。

由此可见,我们的被除数 a = 12, 我们的商 d = 5,那么有两个余 r 满足条件,分别是一个负的余数 r1 = -2 和正的余数 r2 = 3,并且总有规律 r1 + r2 = d。

在计算机语言中,同号的整数运算,所有语言都遵循尽量让商小的原则,所以 12 mod 5 和 -12 mod -5 是一样的方式,结果差一个符号,分别是 `2` 和 `-2`。但是在异号的整数运算中,C 和 Java 都是尽可能让商 d 更大[1] (例如 -12 mod 5 的结果对应的是商 d = -2,余 r = -2),而 Python 则是会让商尽可能的小(例如 -12 mod 5 的结果对应的是商 d = -3,余 r = 3)。

举例图示如下:

Python中的负数取余问题_第1张图片

 

你可能感兴趣的:(蓝桥杯,散列表,职场和发展)