4

引用 ECMAScript 规范第 5.2 节:

符号“x 模 y”(y 必须是有限且非零)计算与 y(或零)符号相同的值 k,使得 abs(k) < abs(y) 并且 x−k = q × y整数q。

因此,如果 y 是正数,则无论 x 的符号如何,“x 模 y”的结果 k 都是正数。

如果我的理解是正确的,ToInt32(-1) 是否等于 ToInt32(1)?

4

3 回答 3

5

该符号x modulo y在规范内部用于描述某些操作的结果。所以是的,结果kx modulo y(根据定义)与 的符号相同y。并未声称%运算符等同于modulo.

如果您有兴趣,%可以在第 11.5.3 节中找到实际规范。有趣的是,它没有使用modulo.

于 2013-08-15T16:12:56.600 回答
0

从我之前的答案中复制粘贴在这里:

取 a % b

1. When both +ve, Modulo & Remainder are one and the same
2. When a is -ve, they are not the same

例如;

a = -10, b = 3

-10 % 3 = -1 的余数

对于模数,将 3 的更大倍数添加到“a”并计算余数。

-10 + 12 = 2

2 % 3 = 2 是你的答案

于 2013-08-15T16:16:40.910 回答
-1

modulo运算被定义为数学模运算:

数学运算,如加法、减法、否定、乘法、除法,以及本节后面定义的数学函数,应始终理解为计算数学实数的精确数学结果,不包括无穷大,也不包括负零区别于正零。

你的问题:

ToInt32(-1) 等于 ToInt32(1)

好吧,不:

让 posInt 为 sign(number) * floor(abs(number))。

posInt = sign(-1) * floor(abs(-1)) = -1;

令 int32bit 为 posInt 模 2 32;也就是说,具有正号且幅度小于 2 32的 Number 类型的有限整数值 k使得 posInt 和 k 的数学差在数学上是 2 32的整数倍。

int32bit = posInt mod 4294967296 = -1 mod 4294967296 = 4294967295

数学结果的wolfram alpha链接

如果 int32bit 大于等于 2 31,则返回 int32bit − 2 32,否则返回 int32bit 。

因为4294967295 >= 2147483648,我们返回4294967295 - 4294967296,IE -1

如果我们运行相同的步骤ToInt32(1),我们得到1. 所以他们没有相同的结果。

于 2013-08-15T17:06:00.960 回答