0%

运算符 % 是取余还是取模?

“运算符 % 不就是用来取余的嘛,而且各语言通用啊。”
“在 C/C++ 、Java 等语言中确实是这样,但在 Python 中,它是取模运算符。”
“等等,取余和取模…有什么区别??”

取余和取模的区别

对于正整数来说,取余和取模得到的结果是相同的:

1
2
7 rem 4 = 3 (7对4取余得到的结果是3)
7 mod 4 = 3 (7对4取模得到的结果也是3)

但是,若有一个为负数,则结果如下:

1
2
-7 rem 4 = -3
-7 mod 4 = 1

那么,计算过程是怎样的呢?
对于整数 a,b 来说,取余运算和取模运算的计算过程都分为两步:

  1. 求整数商: c = a / b
  2. 计算模或者余数: r = a - c * b

取余运算和取模运算在第 1 步不同: 在计算商时,取余运算会向 0 方向舍入;而取模运算会向负无穷方向舍入。

就拿上面的例子来说,按第 1 步计算 -7 / 4 的整数商时,我们知道结果要么是 -1 要么是 -2 。若取余,则商为 -1,第 2 步得到结果为 -3,若取模,则商为 -2,第 2 步得到结果为 1。

这就是取余和取模的区别。

运算符 %

搞清楚取余和取模的区别后,再来说一下运算符 % 到底是取余还是取模。

其实结论在文章开头就已经给出了,% 在 C/C++ 、Java 等语言中是取余运算符,而在 Python 中是取模运算符。至于其他语言,可以代入上面 -7 % 4 的例子输出一下结果就能知道。

对于我们常用的正整数之间运算,取余和取模的结果是相同的,可以放心地使用 % 。

参考文献

觉得文章有帮助,打赏1元鼓励一下作者