负数与取余
一般来说,公认的取余操作(被除数a、除数n、商q以及余数r,n % a = r)需要满足以下三条:
然而这个定义非常广泛。
以-3 % 4
为例,存在两种求法:
-3既可以表示为: (Truncated Division)
也可以表示为:(Floored Division)
Truncated Division
求商时,采用的是,即将算数除法结果的小数部分移除,余下的整数部分作为商。
(也有一种更形象的说法,除法取整时,是朝着靠近0的方向取整)
以-3 % 4
为例:
因此,余数
此实现有如下特点:
- 余数的符号与被除数相同;
Floored Division
求商时,采用的是,即将算数除法结果进行向下取整作为商。
以-3 % 4
为例:
因此,余数
此实现有如下特点:
- 余数的符号与除数相同;
C语言标准
C99,明确指定了需要使用Truncated Version:
When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded.88) If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a.
- This is often called "truncation toward zero".