2017-05-02
不同PL对%的作用有不同规定。先来看看数学上的定义。
对于整型数a,b来说,取模运算(modulo)或者求余运算(remainder)的方法都是:
- 求 整数商: c = a/b;
- 计算模或者余数: r = a - c*b.
求模运算和求余运算在第一步不同:
- 取余运算:在取c的值时,向0 方向舍入(fix)。
- 取模运算:在计算c的值时,向负无穷方向舍入(floor,也做向下舍入,地板除。相对应的,还有个ceiling,向上舍入)
%的作用:
- C/Java:要先理解到C的整除a/b是直接舍弃小数部分,也就是truncate toeard zero的。所以显然c的%是rem运算。
- Python:py3的整除a//b是floor,也就是向下舍入。所以py的%是mod运算。
实际应用上,只在a和b异号时,rem和mod才存在差别(c才会不同)。这时候,c肯定为负或0(因为a b异号):
- rem:向0取整使|cb| <|a|,r=a-cb与a同号。
- mod:向下取整使|c*b|>|a|,而c确定为负,因此r与b同号。