python中remainder_从C++和Python除法的区别谈谈求模(Modulus)和取余(Remainder)

今天发现一个很有意思的现象。

当做除法的时候,Python2和C++在负数的情况下会得到不同的整除结果:

当做-5 / 3的时候

C++的结果: -1

Python2的结果:-2

(请注意5 / -3的时候仍然会在C++中得到-1, Python2中得到-2)

可以看出C++在进行负数整除的时候执行的是直接舍去小数点后数字的操作,也就是返回和0比较接近的那个数字。

但在Python2中返回的则是小于等于商的最大整数,也就是返回和-∞更接近的数。

在做%操作的时候,依据的是这样的逻辑:

a = b * c + r

其中a是被除数,b是除数,c是商,r是%操作的结果。

在上述例子中,a和b是-5和3。

C++的情况下商c是-1,因此r可以算出来是-2。

Python情况下商c是-2,因此r可以算出来是1。

!!!值得注意的是:当把操作改成5 % -3的时候,C++的结果是2,Python2的结果是-1,和之前的结果正好符号相反。

如果有同学觉得这里非常乱,请牢记a = b * c + r。

用同样的逻辑,当a是5,b是-3时,c++因为商c是-1,因此r是2,Python时商c是-2因此r是-1。

那么造成这种差异的原因是什么呢?

其实是因为“

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值