取模与求余的差别

2017-05-02

不同PL对%的作用有不同规定。先来看看数学上的定义。

对于整型数a,b来说,取模运算(modulo)或者求余运算(remainder)的方法都是:

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

求模运算和求余运算在第一步不同:

  1. 取余运算:在取c的值时,向0 方向舍入(fix)。
  2. 取模运算:在计算c的值时,向负无穷方向舍入(floor,也做向下舍入,地板除。相对应的,还有个ceiling,向上舍入)

%的作用:

  1. C/Java:要先理解到C的整除a/b是直接舍弃小数部分,也就是truncate toeard zero的。所以显然c的%是rem运算。
  2. Python:py3的整除a//b是floor,也就是向下舍入。所以py的%是mod运算。

实际应用上,只在a和b异号时,rem和mod才存在差别(c才会不同)。这时候,c肯定为负或0(因为a b异号):

  1. rem:向0取整使|cb| <|a|,r=a-cb与a同号。
  2. mod:向下取整使|c*b|>|a|,而c确定为负,因此r与b同号。
原文地址:https://www.cnblogs.com/kirito-c/p/10305903.html