模运算与取余运算的区别

模运算与求余

首先,“模运算”与“求余运算”都是求取除法中产生的“余数”。比如 “7÷3”产生的余数就是1,所以无论对7和3采用“模运算”还是“求余运算”,得到的结果都是 1 。这也就是为什么我们在学习程序设计时经常把“模运算”与“求余运算”混为一谈的原因。

但是在数学专业人士的眼中,二者是有很大区别的。假如除数与被除数一正一负,那么这个区别就显现出来了:比如对 7 和 -3 进行模运算,得到的结果应该是-2,而求取余数的结果则应该是-1。这是为什么?因为二者的实际规则如下:

图片

假设有两个数无法整除,也就是相除的结果是小数,比如: 5/-3 = -1.67,那么:

在求余运算中,把二者相除的商定义为-1,也就是把 -1.67 向 “0” 靠近所得到的第一个整数。由于 “ 被除数 = 除数 X 商 + 余数 ”,所以此时等式应为 “ 5 = -3 X -1 + 余数 ”,可得余数为 2 。也就是说,按照求余运算的规则, 5/-3 的结果是 2 。

而在求模运算中,则把 5 和 -3 相除的商定义为 -2 ,也就是把 -1.67 向 “负无穷大” 靠近所得到的第一个整数。于是根据 “ 被除数 = 除数 X 商 + 余数 ”,所以此时等式应为 “ 5 = -3 X -2 + 余数 ”,可得余数为 1 。也就是说,按照求余运算的规则, 5/-3 的结果是 1 。

在C语言中,“%”虽然被称为“模运算”,但其实执行的是上述“求余运算”的规则。而**在Python语言中,“%”则是采取了上述“求模运算”的规则。**所以在C语言和Python语言中分别执行 “5 % -3”,我们会看到完全不同的结果。

此外补充一点:一般说来,求模运算规定除数禁止为负数,Python2.5.1版本以前也忠实执行了该规定。所以在Python2.4.7等版本中,“5%-3”其实无法执行。不过从2.5.1版本开始,Python已经允许把负数作为除数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值