Как найти 32-битное число - PullRequest
2 голосов
/ 12 июня 2011

Могу ли я спросить, как найти 32-битную версию числа, так как я хочу обойти с числами с помощью побитового оператора AND в JavaScript.В нем указано, что числа выполняют побитовые операции в 32-битной версии.

Второй вопрос: в битовом JavaScript-операторе И (&) операция чисел выполняется в 32-битной версии, верно?Затем, в конце концов, он конвертирует его обратно в 64-битную версию?

1 Ответ

5 голосов
/ 12 июня 2011

Согласно спецификации ECMAScript , возвращаемые значения от побитовых операций должны быть 32-разрядными целыми числами. Соответствующая цитата:

Производство A : A @ B, где @ один из побитовых операторов в продукция выше, оценивается как следует:

  1. Пусть lref будет результатом оценки A.
  2. Пусть lval будет GetValue(lref).
  3. Пусть rref будет результатом оценки B.
  4. Пусть rval будет GetValue(rref).
  5. Пусть lnum будет ToInt32(lval).
  6. Пусть rnum будет ToInt32(rval).
  7. Вернуть результат применения побитового оператора @ к lnum и rnum.

Результатом является 32-разрядное целое число со знаком.

Поэтому, чтобы преобразовать любое число в 32-разрядное целое число, вы можете просто выполнить двоичную операцию, которая не будет иметь никакого эффекта. Например, здесь я преобразовываю число с плавающей точкой в ​​целое число, используя двоичный код без операции, или (| 0):

var x = 1.2, y = 1
x = x | 0
alert(x == y) # prints "true"
...