В JavaScript существуют четыре поразрядные операции, которые позволяют работать с числами на уровне их двоичного представления. Эти операции включают в себя побитовое И (&), побитовое ИЛИ (|), исключающее ИЛИ (^) и НЕ (~). Давайте рассмотрим каждую из них подробнее.
Побитовое И (&)
Эта операция выполняет логическое И над каждым битом двух чисел. Результатом будет число, в котором установлены только те биты, которые были установлены одновременно в обоих исходных числах.
Пример:
let a = 13; // Двоичное представление: 1101
let b = 9; // Двоичное представление: 1001
let result = a & b; // Двоичное представление результата: 1001
console.log(result); // Результат: 9
Побитовое ИЛИ (|)
Эта операция выполняет логическое ИЛИ над каждым битом двух чисел. Результатом будет число, в котором установлены все биты, которые были установлены хотя бы в одном из исходных чисел.
Пример:
let a = 13; // Двоичное представление: 1101
let b = 9; // Двоичное представление: 1001
let result = a | b; // Двоичное представление результата: 1101
console.log(result); // Результат: 13
Исключающее ИЛИ (^)
Эта операция выполняет логическую операцию XOR над каждым битом двух чисел. Результатом будет число, в котором установлены только те биты, которые отличаются между двумя исходными числами.
Пример:
let a = 13; // Двоичное представление: 1101
let b = 9; // Двоичное представление: 1001
let result = a ^ b; // Двоичное представление результата: 0100
console.log(result); // Результат: 4
Побитовое НЕ (~)
Эта операция инвертирует каждый бит числа. То есть, нули становятся единицами, а единицы — нулями.
Пример:
let a = 13; // Двоичное представление: 1101
let result = ~a; // Двоичное представление результата: 0010
console.log(result); // Результат: -14
Применение поразрядных операций
Эти операции широко применяются в различных задачах, связанных с работой с битами:
Маски и флаги: Установка, проверка и сброс определенных битов в числовом представлении.
let flags = 0b1010; // Флаги
let mask = 0b0010; // Маска для проверки второго битаif ((flags & mask) !== 0) {
console.log(‘Второй бит установлен.’);
} else {
console.log(‘Второй бит сброшен.’);
}
Проверка четности: Проверка последнего бита числа на четность.
function isEven(n) {
return (n & 1) === 0;
}console.log(isEven(4)); // true
console.log(isEven(5)); // false
Комбинации битов: Объединение или разделение различных частей числа.
let rgbColor = 0xFF6633; // Цвет в формате #FF6633
let red = (rgbColor >> 16) & 0xFF; // Красный компонент
let green = (rgbColor >> 8) & 0xFF; // Зеленый компонент
let blue = rgbColor & 0xFF; // Синий компонент
console.log(`Красный: ${red}, зеленый: ${green}, синий: ${blue}`);
Поразрядные операции являются мощным инструментом для работы с битами и часто используются в низкоуровневом программировании, обработке графики, шифровании и многих других областях.