负数的模如何快速工作?当我做(-1%3)时,它给出-1,但余数为2。
Swift 余数运算符 %计算整数除法的余数:
%
a % b = a - (a/b) * b
哪里/是截断整数除法。就你而言
/
(-1) % 3 = (-1) - ((-1)/3) * 3 = (-1) - 0 * 3 = -1
因此,余数始终与 股息 相同(除非余数为零)。
这与C99标准中所要求的定义相同,例如参见 [ANSI C或ISOC是否指定了-5%10?。另请参阅 Wikipedia:Modulo操作,以概述如何使用不同的编程语言来处理它。
可以在Swift中定义一个“真”模量函数,如下所示:
func mod(_ a: Int, _ n: Int) -> Int { precondition(n > 0, "modulus must be positive") let r = a % n return r >= 0 ? r : r + n } print(mod(-1, 3)) // 2