2013-11-11 2 views
0

Я пытаюсь понять, почему i.e Math.random()*255>>0; будет пропускать/удалять все десятичные знаки. То же самое происходит, если я пишу >>1 или >>2 вместо 0.Оператор с правой стороны - Javascript

Я подошел другой SO-пост, который сказал x >> n оператор может рассматривать как x/2^n. Это все еще не объясняет, почему десятичные знаки уходят.

Любая помощь будет оценена!

+0

@Phil Как это дубликат ссылки, на которую вы ссылаетесь? >> и >>> не одно и то же? –

+0

Упс. Извините, понимание чтения не удалось – Phil

+0

Возможный дубликат [Почему сдвиг на 0 усекает десятичную?] (Http://stackoverflow.com/questions/12125421/why-does-a-shift-by-0-truncate-the- десятичная дробь) –

ответ

4

Согласно спецификации, для преобразования аргументов в 32-разрядные целые числа требуются определенные числовые операции. (http://www.ecma-international.org/ecma-262/5.1/#sec-11.7.2)

ShiftExpression Производство: ShiftExpression >>AdditiveExpression вычисляется следующим образом:

  1. Пусть lref быть результатом оценки ShiftExpression.
  2. Позвольте lval быть GetValue (lref).
  3. Позвольте rref быть результатом оценки AdditiveExpression.
  4. Позвольте rval быть GetValue (rref).
  5. Да lnum be ToInt32 (lval). ← Число преобразуется в 32-битное целое число
  6. Позвольте rnum быть ToUint32 (rval).
  7. Позвольте shiftCount быть результатом маскировки всех, кроме наименее значимых 5 бит rnum, то есть вычислить rnum & 0x1F.
  8. Возврат результата выполнения сдвига вправо до lnum по shiftCount бит. Самый старший бит размножается. Результатом является подписанное 32-битное целое число.
Смежные вопросы