负数模快速
负数模数如何快速工作? 当我做(-1%3)时,它是给-1,但其余的是2.它是什么?
从语言指南 – 基本操作员 :
剩余运营商
余数运算符(
a % b
)计算出a % b
多less个b
将适合a
并返回剩余的值(称为余数)。余数运算符(
%
)在其他语言中也称为模运算符。 然而, 它在Swift中对负数的行为意味着它严格地说是一种余数而不是模运算 。…
计算a的负值的余数时应用同样的方法:
-9 % 4 // equals -1
在等式中插入
-9
和4
得出:-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