有人可以解释一下:
$node -v
v0.10.10
$ node
> (10000000)>>1
5000000
> (100000000)>>1
50000000
> (1000000000)>>1
500000000
> (10000000000)>>1
705032704
根据ECMA第8.5节 - 数字?
,最大int表示不应该是2 ^ 53答案 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位工作。