Какова связь между комплементом 2 и IEEE754? - PullRequest
0 голосов
/ 23 ноября 2018

Раньше я думал, что все числа хранятся на компьютерах в формате дополнения 2.И нет -0 в 2-х дополнениях.Но в IEEE754 есть и +0, и -0.И я прочитал, что в JavaScript все числа IEEE754.Так что теперь я в замешательстве.Более того, в JavaScript ~ a = -a -1.Раньше я думал, что это было вызвано изменением дополнения 2 числа а.Но если каждое число в JavaScript хранится как IEEE754, как мы можем преобразовать его как дополнение 2?

1 Ответ

0 голосов
/ 24 ноября 2018

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

JavaScript - это реализацияECMAScript.Спецификация языка ECMAScript 2018 (издание 9 th , июнь 2018 г.) определяет унарный оператор ~ в пункте 12.5.8 (показан как 12.5.10 в оглавлении, но 12.5.8 в тексте!).Соответствующая часть:

UnaryExpression : ~ UnaryExpression
1. Let expr be the result of evaluating UnaryExpression.
2. Let oldValue be ? ToInt32(? GetValue(expr)).
3. Return the result of applying bitwise complement to oldValue. The result is a signed 32-bit integer.

Операция ToInt32 усекает число до целого числа (удаляя любую часть дроби, округляя до нуля), а затем отображает число в интервал [−2 31, + 2 31 ) по модулю 2 32 .

...