Побитовое НЕ (~)
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 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
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
См. также
© 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