为什么负数取余操作(%)在c和python下结果不同
最近在用python,偶尔有一次涉及到了负数取余操作: -3 % 4
按照之前写c/c++、java的习惯,这里肯定是等于-3。但是python下返回的结果竟然是1!
为什么会有不同的表现呢?先从取余操作本身说起:
关于取余(modulo operation)
取余的定义
由于不同的架构有不同的数字表示法和运算法,因此他们对于取余的定义也有可能略有不同。
一般来说,公认的取余操作(被除数a、除数n、商q以及余数r,n % a = r)需要满足以下三条:
然而这个定义是非常宽泛的。以 -3 % 4为例:
-3既可以表示为:-3 = 4 * -1 + 1
也可以表示为:-3 = 4 * 0 + (-3)
这两种表示法分别对应了两种实现方法:Truncated Division及 Floored Division。两种实现方法的求商方式不同,导致其最终结果也不同。 阅读详细 »