“运算符 % 不就是用来取余的嘛,而且各语言通用啊。”
“在 C/C++ 、Java 等语言中确实是这样,但在 Python 中,它是取模运算符。”
“等等,取余和取模…有什么区别??”
取余和取模的区别
对于正整数来说,取余和取模得到的结果是相同的:
1 | 7 rem 4 = 3 (7对4取余得到的结果是3) |
但是,若有一个为负数,则结果如下:
1 | -7 rem 4 = -3 |
那么,计算过程是怎样的呢?
对于整数 a,b 来说,取余运算和取模运算的计算过程都分为两步:
- 求整数商: c = a / b
- 计算模或者余数: r = a - c * b
取余运算和取模运算在第 1 步不同: 在计算商时,取余运算会向 0 方向舍入;而取模运算会向负无穷方向舍入。
就拿上面的例子来说,按第 1 步计算 -7 / 4 的整数商时,我们知道结果要么是 -1 要么是 -2 。若取余,则商为 -1,第 2 步得到结果为 -3,若取模,则商为 -2,第 2 步得到结果为 1。
这就是取余和取模的区别。
运算符 %
搞清楚取余和取模的区别后,再来说一下运算符 % 到底是取余还是取模。
其实结论在文章开头就已经给出了,% 在 C/C++ 、Java 等语言中是取余运算符,而在 Python 中是取模运算符。至于其他语言,可以代入上面 -7 % 4 的例子输出一下结果就能知道。
对于我们常用的正整数之间运算,取余和取模的结果是相同的,可以放心地使用 % 。