负数求余(模)

结论

求模运算是商向0取值,而求余运算是商向负无穷取值。

最近在微信群看到了一个有趣的问题,问5%(-2)结果是多少?(-5)%2呢?相信大家对正数的求余(模)都很清楚,但是负数呢?求余后的数到底是正还是负,不能非常肯定。为此我找了一些资料,写下了这篇文章。文章并不是很严谨,可能会有很多纰漏,不过我希望能解决一些人的疑惑。

编程语言中 %运算 可能是求余运算,也可能是求模运算。不同编程语言可能是不一样的,不过貌似较多的是求模运算。请在具体环境中试验。

下面是百度百科的解释。

取模运算(“Modulo Operation”)和取余运算(“Complementation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。

大概就是说,求模和求余几乎没什么区别,区别是操作有点不同,也就是我要说的:求模运算是商向0取值,而求余运算是商向负无穷取值。

举个例子。

5%2

求模

求模是多少?首先5/2=2.5,商必须是整数,这时候面临两种选择:取2还是取3?因为我们是取模运算,我们的整数商要倾向于0,其实就是去掉小数位,所以商取2,所以5-(2*2)=1,最后结果是1,即5%2=1。

求余

这时候我们来求余,商要向负无穷取值,商取2,结果也是1。

那我们来看看负数的例子。

(-7)%10

求模

(-7)/10 = -0.7。求模商向0取值,也就是去掉小数位,因而商取0,所以(-7)-(10*0)=-7,结果是-7。

求余

求余商向负无穷取值,商取-1。(-7)-(10*1)=3。好了,结果是3。

其他数的计算思路也是这样的,只要你掌握了核心求模运算的商向0取整,求余运算的商向负无穷取整,然后多找几个数练习一下然后和答案对比一下,以后就不会出错了。比如5%(-2),求模是1,求余是-1。对了,你问我怎么检查?诶……貌似JavaScript是求模运算,Python是求余运算。你去这两种语言环境测试下吧,以上!

总结
  • 求模运算的商向0取整,求余运算的商向负无穷取整。
  • 不同的编程语言%操作符的实现可能会有所区别,请在真实环境中测试,确定是求模运算还是求余运算。

参考资料:

  1. http://baike.baidu.com/link?url=Oxk_f86KnvG-HIAj7g9qvkRMgZR4ilqKrYuX3qIxwL1zX1Oz_ZkfF06gm_JZyw0kiSVoKnnbbcxt67QpVqQ2YpxbVT07r79MRvu6YIJGvVfPVvp8ph_SBcFSx3lVdm-v

  2. https://www.zhihu.com/question/34116024

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值