负数模数在swift中

Ash*_*dey 11 ios swift

负数的模数如何在swift中工作?当我这样做时(-1%3)它给出了-1但剩下的是2.它有什么收获?

Mar*_*n R 22

Swift 余数运算符 %计算整数除法的余数:

a % b = a - (a/b) * b
Run Code Online (Sandbox Code Playgroud)

/截断整数除法在哪里.在你的情况下

(-1) % 3 = (-1) - ((-1)/3) * 3 = (-1) - 0 * 3 = -1
Run Code Online (Sandbox Code Playgroud)

因此,余数总是与被除数相同(除非余数为零).

这与所要求的定义相同,例如在C99标准中,参见例如 ANSI C或ISO C是否指定-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
Run Code Online (Sandbox Code Playgroud)


dfr*_*fri 5

来自语言指南 - 基本操作员:

剩余运营商

余数运算符(a % b)计算出b 内部适合的多个倍数,a并返回剩余的值(称为余数).

余数operator(%)也称为其他语言的模运算符.但是,它在Swift中对负数的行为意味着它严格来说是一个余数而不是模运算.

...

在计算a的负值的余数时应用相同的方法:

-9 % 4   // equals -1
Run Code Online (Sandbox Code Playgroud)

插入-94输入等式产生:

-9 = (4 x -2) + -1
Run Code Online (Sandbox Code Playgroud)

给出余数值-1.

在你的情况下,没有3适合1,余数是1(与-1- >余数相同-1).

  • 文档当然可以改进。*“适合‘-9’的‘4’的最大倍数”*不是很清楚...... (3认同)