一尘不染

快速的负数模

swift

负数的模如何快速工作?当我做(-1%3)时,它给出-1,但余数为2。


阅读 188

收藏
2020-07-07

共1个答案

一尘不染

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
2020-07-07