右移运算符 - Javascript

Right shift operator - Javascript

本文关键字:Javascript 运算符 右移      更新时间:2023-09-26

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

我翻过另一个SO帖子,说x >> n操作员可以被视为x / 2^n。这仍然不能解释为什么小数消失了。

任何帮助将不胜感激!

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

生产ShiftExpressionShiftExpression>> AdditiveExpression的评估如下:

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