C和Python中取模运算

最近再看Python的相关书籍
突然发现Python中的%(一般叫做取模运算)和C中的%(一般叫做取余运算)不一样
自己查了点资料,做了一下总结

首先要说一下不同的取整方式
取整方式分为三类:向上取整,向下取整,向零取整
1.向上取整:向+∞方向取最接近精确值的整数。
在这种取整方式下,5 / 3 = 2, -5 / -3 = 2, -5 / 3 = -1, 5 / -3 = -1
2.向下取整:向-∞方向取最接近精确值的整数。
在这种取整方式下,5 / 3 = 1, -5 / -3 = 1, -5 / 3 = -2, 5 / -3 = -2
3.向零取整:向0方向取最接近精确值的整数。
在这种取整方式下,5 / 3 = 1, -5 / -3 = 1, -5 / 3 = -1, 5 / -3 = -1

不管是C还是Python,对于整数a和b进行取模运算和取余运算可以总结分为2个步骤:
  1.计算整数商: c=取整(a/b),此处的a/b可以理解为数学意义上的除法
  2.计算模或余数:r=a-c*b
两者的区别就在于第 1 步中的计算整数商不同,也就是C和Python采用了不同的取整方式
r=a-(a/b)*b,其中对于除法a/b,不同的语言采用不同的方式
C采用的是向零取整,Python采用的是向下取整

根据上面的规则,C中的取余运算:

5 % 3 = 2
/* 根据公式r=5-(5/3)*3,其中5/3采用的是向零取整,结果为1,所以r=5-1*3=2 */
-5 % -3 = -2
/* 根据公式r=-5-(-5/(-3))*(-3),其中-5/(-3)采用的是向零取整,结果为1,所以r=-5-1*(-3)=-2 */
-5 % 3 = -2
/* 根据公式r=-5-(-5/3)*3,其中-5/3采用的是向零取整,结果为-1,所以r=-5-(-1)*3=-2 */
5 % -3 = 2
/* 根据公式r=5-(5/(-3))*(-3),其中5/(-3)采用的是向零取整,结果为-1,所以r=5-(-1)*(-3)=2 */

通过观察发现,C中取余运算的结果的符号和被除数一致

同样,Python的取模运算:

5 % 3 = 2
/* 根据公式r=5-(5/3)*3,其中5/3采用的是向下取整,结果为1,所以r=5-1*3=2 */
-5 % -3 = -2
/* 根据公式r=-5-(-5/(-3))*(-3),-5/(-3)采用向下取整,结果是1,所以r=-5-1*(-3)=-2 */
-5 % 3 = 2
/* 根据公式r=-5-(-5/3)*3,-5/3采用向下取整,结果是-2,所以r=-5-(-2)*3=1 */
5 % -3 = -2
/* 根据公式r=5-(5/(-3))*(-3),5/(-3)采用向下取整,结果是-2,所以r=5-(-2)*(-3)=-1 */

通过观察可以发现,Python中取模运算的结果的符号与除数一致

注意Python的除法有很多:
整除://,向下取整
浮点数除法:/,返回浮点数
强制类型转换取整:int(),向零取整
我们这里说的整除是//,即向下取整
也就是说,对于Python,取模运算的公式应该为:r=a-(a//b)*b

还有顺便吐槽一下,CSDN的编辑器是真的难用!!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值