Spec-Zone.ru › JavaScript

Побитовое НЕ (~)

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

Побитовый оператор НЕ (~) возвращает число или BigInt, в двоичном представлении которого установлен 1 в каждой битовой позиции, для которой соответствующий бит операнда установлен в 0, и 0 в противном случае.

Попробуйте

const a = 5; // 00000000000000000000000000000101
const b = -3; // 11111111111111111111111111111101

console.log(~a); // 11111111111111111111111111111010
// Expected output: -6

console.log(~b); // 00000000000000000000000000000010
// Expected output: 2

Синтаксис

~x

Описание

Оператор ~ перегружен для двух типов операндов: число и BigInt. Для чисел оператор возвращает 32-битное целое число. Для BigInts оператор возвращает BigInt. Сначала он преобразует операнд в числовое значение и проверяет его тип. Он выполняет BigInt NOT, если операнд становится BigInt; в противном случае он преобразует операнд в 32-битное целое число и выполняет побитовое НЕ числа.

Оператор работает с битовыми представлениями операндов в дополнительном коде. Оператор применяется к каждому биту, и результат формируется побитово.

Таблица истинности для операции НЕ:

x НЕ x
0 1
1 0
 9 (base 10) = 00000000000000000000000000001001 (base 2)
               --------------------------------
~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)

Побитовое НЕ любого 32-битного целого числа x дает -(x + 1). Например, ~-5 дает 4.

Числа, содержащие более 32 бит, обрезаются по старшим битам. Например, следующее целое число, содержащее более 32 бит, будет преобразовано в 32-битное целое число:

Before: 11100110111110100000000000000110000000000001
After:              10100000000000000110000000000001

Предупреждение: Вы можете увидеть, как люди используют ~~ для усечения чисел до целых. Побитовое НЕ любого числа x дважды возвращает x, преобразованное в 32-битное целое число, что дополнительно удаляет старшие биты для чисел вне диапазона от -2147483648 до 2147483647. Вместо этого используйте Math.trunc().

Для BigInts усечения нет. Концептуально, положительные BigInts имеют бесконечное количество ведущих битов 0, а отрицательные BigInts — бесконечное количество ведущих битов 1.

Примеры

Использование побитового НЕ

~0; // -1
~-1; // 0
~1; // -2

~0n; // -1n
~4294967295n; // -4294967296n

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-bitwise-not-operator

Совместимость с браузерами

Настольные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS Bun Deno Node.js
bitwise_not
1
12
1
3
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Побитовые операторы в руководстве по JS

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_NOT

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API