В javascript, будь то побитовое ИЛИ использовать iee-754 в качестве формата хранения во время расчета, или нет? - PullRequest
0 голосов
/ 14 апреля 2019

Если для вычисления результата в Javascript использовалось побитовое ИЛИ ieee-754, я не могу понять результат.

например:

2|1 =>3

В ieee-754, 2 сохраняется как 0 10000000000 0000...0000, и 1 сохраняется как 0 01111111111 0000...0000

если exec побитовое или, я думаю, что результат 0 11111111111 0000...0000, но почему он выдает 3?

Как и выше,

пример:

0.1|0 =>0

0 сохраняется как 0 00000000000 0000...0000, и 0.1 сохраняется как 0 01111111011 1001100110011001100110011001100110011001100110011010

если exec поразрядно или, я думаю, что результат 0 01111111011 1001100110011001100110011001100110011001100110011010, но почему он выдает 0 и теряет десятичную дробь?

пример:

2|-1 =>-1

2 сохраняется как 0 10000000000 0000...0000, и -1 сохраняется как 1 01111111111 0000...0000

если exec поразрядно или, я думаю, результат равен 1 11111111111 0000...0000, но почему он выдает -1?

1 Ответ

1 голос
/ 14 апреля 2019

JavaScript - это реализация ECMAScript. Спецификация языка ECMAScript 2018 (9-е издание, июнь 2018 г.) определяет двоичные побитовые операторы в п. 12.12. Шаги оценки в 12.12.3 включают (используя «@» для обозначения одной из побитовых операций):

  1. Пусть Инум будет? ToInt32 (lval).
  2. Пусть будет Рнум? ToInt32 (RVAL).
  3. Вернуть результат применения побитового оператора @ к lnum и rnum. Результатом является 32-разрядное целое число со знаком.

Таким образом, побитовая операция не выполняется с байтами, которые представляют Number. Значение Number преобразуется в 32-разрядное двоичное представление в виде дополнения к целому числу, и операция выполняется с этими битами. Затем результирующие биты интерпретируются как 32-битное двоичное представление дополнения, поэтому значение, которое они представляют, становится значением, полученным в результате операции.

...