' x modulo y'的结果是什么?

时间:2013-08-15 16:08:37

标签: javascript

引用ECMAScript规范第5.2节:

  

符号“x modulo y”(y必须是有限且非零)计算a   与y(或零)相同符号的值k使得abs(k)< abs(y)和   对于某个整数q,x-k = q×y。

所以如果y为正,则无论x的符号如何,'x modulo y'的结果k都是正的。

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

从我之前的回答here:

复制粘贴

拿一个%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

对于Modulo,在'a'中添加3的倍数并计算余数。

-10 + 12 = 2

2%3 = 2是你的答案

答案 2 :(得分:-1)

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

  

数学运算,如加法,减法,否定,   乘法,除法和后面定义的数学函数   在本节中,应始终将其理解为精确计算   关于数学实数的数学结果,没有   包括无穷大,不包括负零   区别于正零。

你的问题:

  

ToInt32(-1)等于ToInt32(1)

嗯,不:

  

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

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

让int32bit为posint modulo 2 32 ;也就是说,有限整数值k   具有正号且具有小于2 32 的数字类型   posInt和k的数学差异在数学上是一个   2 32 的整数倍。

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

wolfram alpha link for mathematical result

  

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

由于4294967295 >= 2147483648,我们会返回4294967295 - 4294967296,即I.E。 -1

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