今天发现一个很有意思的现象。
当做除法的时候,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。
那么造成这种差异的原因是什么呢?
其实是因为“