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 .