节点int溢出?

时间:2014-01-14 12:55:28

标签: javascript node.js

有人可以解释一下:

$node -v
v0.10.10

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

根据ECMA第8.5节 - 数字?

,最大int表示不应该是2 ^ 53

2 个答案:

答案 0 :(得分:3)

根据ECMAScript specification on >>,左操作数被传递到抽象操作ToInt32,其描述如下:

  

抽象操作ToUint32将其参数转换为-2 31 到2 31 -1范围内的2个 32 整数值之一,包容。

其行为指定为:

  
      
  • posInt 成为签名(数字)×floor(绝对(数字))。
  •   
  • int32bit posInt modulo 2 32 ;也就是说,数字类型的有限整数值k具有正号并且幅度小于2 32
  •   
  • 如果 int32bit 大于或等于2 31 ,则返回 int32bit - 2 32 ,否则返回 int32bit
  •   

因此,>>的结果不能大于2 31 ,任何更大的值都会通过模3 32 转换(带负数)溢出值大于2 31 )。

答案 1 :(得分:-1)

按位运算符似乎只能在32位工作。