Javascript 将以下代码段评估为 -1。
-5 % 4
我知道余数定理表明 a = bq + r 使得 0 ≤ r < b。鉴于上述定义,答案不应该是 3 吗?为什么 JavaScript 返回 -1?
Javascript 将以下代码段评估为 -1。
-5 % 4
我知道余数定理表明 a = bq + r 使得 0 ≤ r < b。鉴于上述定义,答案不应该是 3 吗?为什么 JavaScript 返回 -1?
大多数编程语言使用对称模数,这与负值的数学模数不同。
数学模可以使用对称模计算,如下所示:
a mod b = ((a % b) + b) % b
mod
数学模
%
对称模
原因是它%
不是模数而是余数运算符。看这里
如果您%
用于进行模运算,则计算结果为 –1 或 3 并不重要(至少在概念上)-5 % 4
,因为这两个数字在模 4 下是全等的:就模运算而言,它们是相同的.
...如果余数不为零,则余数有两种可能的选择,一种是负数,另一种是正数,商也有两种可能的选择。通常,在数论中,总是选择正余数,但编程语言根据语言以及 a 和 n 的符号进行选择。(http://en.wikipedia.org/wiki/Modulo_operation)
在python中,它采用除数的符号:
-5 % 4 == 3 # -5 = (-2) * 4 + 3
在 javascript 中,它采用除法符号:
-5 % 4 == -1 # -5 = (-1) * 4 - 1