我试图理解为什么ie Math.random()*255>>0;
会跳过/删除所有小数。如果我写>>1
或>>2
而不是0,则会发生同样的事情。
我来到另一个SO帖子,说x >> n
运营商可以被视为x / 2^n
。这仍然无法解释为何小数消失。
任何帮助将不胜感激!
答案 0 :(得分:4)
根据规范,首先需要进行某些数值运算才能将参数转换为32位整数。 (http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2)
制作
ShiftExpression
:ShiftExpression
>>AdditiveExpression
评估如下:
- 让
的结果lref
成为评估ShiftExpression
。- 让
lval
为GetValue(lref
)。- 让
的结果rref
成为评估AdditiveExpression
。- 让
rval
为GetValue(rref
)。- 让
lnum
成为ToInt32(lval
)。 ←此处将数字转换为32位整数- 让
rnum
成为ToUint32(rval
)。- 让
shiftCount
成为屏蔽除rnum
的最低5位之外的所有内容的结果,即计算rnum & 0x1F
。- 返回
醇>lnum
位shiftCount
执行符号扩展右移的结果。传播最重要的位。结果是带符号的32位整数。