所谓取模运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得 a \% b = a - n * b = m 。
先测试几个例子:
1234 | print(9%5) # 4print(-9%5) # 1print(9%-5) # -1print(-9%-5) # -4 |
---|
可以看到,数值部分虽然相同,但是正负符号的四种不同组合,会产生完全不同的四种结果。那么这里面有什么规律吗? 实际上,虽然结果不一样,不过取模运算完全遵从统一的规则:
a \% b = a- \lfloor\frac{a}{b}\rfloor * b
其中\lfloor\frac{a}{b}\rfloor表示a除以b的结果向下取整。比如9\%5,先计算\lfloor\frac{9}{5}\rfloor,向下取整得到1,然后计算9-1*5,得到4;
同理-9\%5,先计算\lfloor\frac{-9}{5}\rfloor,向下取整得到-2,然后计算-9-(-2*5),得到1;再来看9\%-5:
9 \% -5 = \lfloor\frac{9}{-5}\rfloor = 9-(-2*-5) = -1
最后是-9\%-5:
-9 \% -5 = \lfloor\frac{-9}{-5}\rfloor = -9-(1*-5) = -4
虽然知道结果是如何计算出来的,不过人脑不比电脑,这样计算未免太复杂,为避免给大脑增加负担,再根据上面的规则,这里我总结了一个简单的记忆方法:
简单归纳:
注:此规律的前提是除的结果一定是向下取整,如果你用java去套这个规律会发现完全行不通。