负数模快速

负数模数如何快速工作? 当我做(-1%3)时,它是给-1,但其余的是2.它是什么?

从语言指南 – 基本操作员 :

剩余运营商

余数运算符( a % b )计算出a % b多less个b将适合a并返回剩余的值(称为余数)。

余数运算符( % )在其他语言中也称为模运算符。 然而, 它在Swift中对负数的行为意味着它严格地说是一种余数而不是模运算

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

 -9 % 4 // equals -1 

在等式中插入-94得出:

 -9 = (4 x -2) + -1 

给出一个-1的余数值。

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

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

 a % b = a - (a/b) * b 

其中/是截断整数除法。 在你的情况

 (-1) % 3 = (-1) - ((-1)/3) * 3 = (-1) - 0 * 3 = -1 

所以余数总是和股息一样 (除非余数为零)。

这与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