Spec-Zone.ru › JavaScript

Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (^)

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

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

Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (^) возвращает число или BigInt, двоичное представление которого имеет 1 в каждой битовой позиции, для которой соответствующие биты одного, но не обоих операндов являются 1.

Попробуйте

const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011

console.log(a ^ b); // 00000000000000000000000000000110
// Expected output: 6

Синтаксис

x ^ y

Описание

Оператор ^ перегружен для двух типов операндов: число и BigInt. Для чисел оператор возвращает 32-битное целое число. Для BigInts оператор возвращает BigInt. Он сначала приводит оба операнда к числовым значениям и проверяет их типы. Он выполняет BigInt XOR, если оба операнда становятся BigInts; в противном случае он преобразует оба операнда в 32-битные целые числа и выполняет побитовое XOR для чисел. TypeError выбрасывается, если один операнд становится BigInt, а другой становится числом.

Оператор работает с битовыми представлениями операндов в дополнительном коде. Каждый бит первого операнда сопоставляется с соответствующим битом второго операнда: *первый бит* с *первым битом*, *второй бит* со *вторым битом* и так далее. Оператор применяется к каждой паре битов, и результат формируется побитово.

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

x y x XOR y
0 0 0
0 1 1
1 0 1
1 1 0
     9 (base 10) = 00000000000000000000000000001001 (base 2)
    14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 ^ 9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)

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

Before: 11100110111110100000000000000110000000000001
After:              10100000000000000110000000000001

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

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

Примеры

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

// 9  (00000000000000000000000000001001)
// 14 (00000000000000000000000000001110)

14 ^ 9;
// 7  (00000000000000000000000000000111)

14n ^ 9n; // 7n

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

Specification
ECMAScript® 2027 Language Specification
# prod-BitwiseXORExpression

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

Desktop Mobile Server
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
bitwise_xor
1
12
1
3
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Побитовые операторы в руководстве по JS
  • Побитовое присваивание XOR (^=)

© 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_XOR

Spec-Zone.ru

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