有人可以解释一下吗:

$node -v
v0.10.10

$ node
> (10000000)>>1
5000000
> (100000000)>>1
50000000
> (1000000000)>>1
500000000
> (10000000000)>>1
705032704


根据ECMA第8.5节-数字,不应该是最大整数表示形式的2 ^ 53吗?

最佳答案

根据ECMAScript specification on >>,左操作数将传递给抽象操作ToInt32,其描述为:


  抽象运算ToUint32将其自变量转换为-231至231-1(含)范围内的232个整数值之一。


其行为被指定为:


  
  设posInt为符号(数字)×底数(绝对(数字))。
  设int32bit为posInt模232;也就是说,数值类型为正数且大小小于232的有限整数k
  如果int32bit大于或等于231,则返回int32bit-232,否则返回int32bit。
  


因此,>>的结果不能大于231,并且任何较大的值都将通过模332转换(对于大于231的值,负溢出)。

关于javascript - Node int溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21114117/

10-09 10:15