Операции сдвига javascript

В JavaScript есть три операции сдвига битовых значений: левосторонний сдвиг (<<), правосторонний сдвиг (>>) и беззнаковый правосторонний сдвиг (>>>). Эти операции позволяют перемещать биты числа влево или вправо, что полезно в низкоуровневых вычислениях и манипуляциях с двоичными данными.

Левосторонний сдвиг (<<)
Левый сдвиг перемещает все биты числа влево на указанное количество позиций. Освобождающиеся позиции справа заполняются нулями. Эта операция эквивалентна умножению числа на степень двойки.
 
Синтаксис:

число << количество_сдвигов

Пример:

let a = 5; // Двоичное представление: 101
let b = a << 1; // Перемещаем биты на одну позицию влево: 1010
console.log(b); // Результат: 10

Правосторонний сдвиг (>>)
Правый сдвиг перемещает все биты числа вправо на указанное количество позиций. При этом освобождающиеся позиции слева заполняются знакомовым битом (то есть копируется самый левый бит, который определяет знак числа).

Синтаксис:

число >> количество_сдвигов

Пример:

let c = 20; // Двоичное представление: 10100
let d = c >> 2; // Перемещаем биты на две позиции вправо: 00101
console.log(d); // Результат: 5

Беззнаковый правосторонний сдвиг (>>>)
Беззнаковый правый сдвиг аналогичен обычному правому сдвигу, за исключением того, что освобождающиеся позиции слева всегда заполняются нулями, независимо от знака исходного числа.
 
Синтаксис:

число >>> количество_сдвигов

Пример:

let e = —4; // Двоичное представление: 11111111 11111111 11111111 11111100
let f = e >>> 2; // Перемещаем биты на две позиции вправо: 00111111 11111111 11111111 11111111
console.log(f); // Результат: 1073741823

Применение операций сдвига
Операции сдвига часто используются в следующих случаях:

Оптимизация арифметических операций: Умножение и деление на степени двойки можно заменить операциями сдвига.

let x = 7;
let y = x << 3; // Эквивалентно умножению на 8: 7 * 8 = 56
console.log(y); // Результат: 56

Манипуляции с битами: Операции сдвига полезны для установки, сброса или проверки отдельных битов в числе.

let flag = 0b00001000; // Битовый флаг
let value = 0b11001100;
if ((value & flag) === flag) {
console.log(‘Флаг установлен’);
}

Работа с цветовыми моделями: В графическом программировании часто требуется разбить RGB-значение на отдельные компоненты.

let color = 0xFF6633; // Цвет в формате #FF6633
let red = (color >> 16) & 0xFF; // Красный компонент
let green = (color >> 8) & 0xFF; // Зеленый компонент
let blue = color & 0xFF; // Синий компонент
console.log(`Красный: ${red}, зеленый: ${green}, синий: ${blue}`);

Важно помнить:
Все числа в JavaScript представлены в виде 32-битных целых чисел со знаком.
Перед выполнением операций сдвига JavaScript преобразует операнды в 32-битное целое число.
Если количество сдвигов превышает 31, оно усекается до остатка от деления на 32.
Использование операций сдвига требует понимания работы с двоичной системой счисления и может быть полезным инструментом для оптимизации кода и работы с битами.

Добавить комментарий

Войти с помощью: