0

我试图理解为什么 ieMath.random()*255>>0;会跳过/删除所有小数。>>1如果我写or>>2而不是 0,也会发生同样的事情。

我遇到了另一个 SO-post 说x >> noperator 可以被视为 x / 2^n. 这仍然不能解释为什么小数会消失。

任何帮助,将不胜感激!

4

1 回答 1

4

根据规范,首先需要某些数值运算才能将参数转换为 32 位整数。(http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2

产生式ShiftExpression: ShiftExpression>>AdditiveExpression评估如下:

  1. lref是评估的结果ShiftExpression
  2. 设为GetValue lval( lref)。
  3. rref是评估的结果AdditiveExpression
  4. 设为GetValue rval( rref)。
  5. 设为ToInt32 lnum( lval)。← 这里将数字转换为 32 位整数
  6. 设为ToUint32 rnum( rval)。
  7. shiftCount成为屏蔽除 的最低有效 5 位(rnum即计算 )之外的所有结果的结果rnum & 0x1F
  8. 返回执行符号扩展右移一位的lnum结果shiftCount。传播最高有效位。结果是一个有符号的 32 位整数。
于 2013-11-11T00:31:00.353 回答