右移运算符 - Javascript

时间:2013-11-11 00:26:55

标签: javascript bitwise-operators

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

我来到另一个SO帖子,说x >> n运营商可以被视为x / 2^n。这仍然无法解释为何小数消失。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

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

  

制作ShiftExpressionShiftExpression>> AdditiveExpression评估如下:

     
      
  1. lref成为评估ShiftExpression
  2. 的结果   
  3. lval为GetValue(lref)。
  4.   
  5. rref成为评估AdditiveExpression
  6. 的结果   
  7. rval为GetValue(rref)。
  8.   
  9. lnum成为ToInt32(lval)。 ←此处将数字转换为32位整数
  10.   
  11. rnum成为ToUint32(rval)。
  12.   
  13. shiftCount成为屏蔽除rnum的最低5位之外的所有内容的结果,即计算rnum & 0x1F
  14.   
  15. 返回lnumshiftCount执行符号扩展右移的结果。传播最重要的位。结果是带符号的32位整数。
  16.