我试图理解为什么 ieMath.random()*255>>0;
会跳过/删除所有小数。>>1
如果我写or>>2
而不是 0,也会发生同样的事情。
我遇到了另一个 SO-post 说x >> n
operator 可以被视为 x / 2^n
. 这仍然不能解释为什么小数会消失。
任何帮助,将不胜感激!
我试图理解为什么 ieMath.random()*255>>0;
会跳过/删除所有小数。>>1
如果我写or>>2
而不是 0,也会发生同样的事情。
我遇到了另一个 SO-post 说x >> n
operator 可以被视为 x / 2^n
. 这仍然不能解释为什么小数会消失。
任何帮助,将不胜感激!
根据规范,首先需要某些数值运算才能将参数转换为 32 位整数。(http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2)
产生式
ShiftExpression
:ShiftExpression
>>AdditiveExpression
评估如下:
- 让
lref
是评估的结果ShiftExpression
。- 设为GetValue
lval
(lref
)。- 让
rref
是评估的结果AdditiveExpression
。- 设为GetValue
rval
(rref
)。- 设为ToInt32
lnum
(lval
)。← 这里将数字转换为 32 位整数- 设为ToUint32
rnum
(rval
)。- 让
shiftCount
成为屏蔽除 的最低有效 5 位(rnum
即计算 )之外的所有结果的结果rnum & 0x1F
。- 返回执行符号扩展右移一位的
lnum
结果shiftCount
。传播最高有效位。结果是一个有符号的 32 位整数。