Узнайте, какой
вы программист?
Проверьте себя в Бинго от Хекслета, получите звание и приятные бонусы
Главная | Все статьи | Код

Битовые операции в JavaScript

JavaScript Время чтения статьи ~4 минуты
Битовые операции в JavaScript главное изображение

Битовые операции — отдельная категория операций в программировании, которые выполняются на уровне битов чисел. В низкоуровневом программировании они применяются для оптимизации кода, обработки изображений и криптографии. Поговорим о том, как работают битовые операции и как их лучше всего применять.

Познакомьтесь с Фронтенд разработкой бесплатно

Начните с этих 5 уроков

Что такое битовые операции?

Числа в компьютере представлены в двоичной системе счисления, где используются только два символа: 0 и 1. Каждый символ в двоичной системе называется битом. Например, число 5 в двоичной системе будет записано как 101. Здесь каждый из трех символов (1, 0 и 1) — это отдельный бит.

Битовые (или побитовые) операции — это операции, выполняемые на уровне отдельных битов чисел. В отличие от обычных арифметических или логических операций, которые работают с числами целиком, битовые операции манипулируют каждым битом отдельно.

На заре развития программирования разработка велась на ассемблере, где управление отдельными битами было повседневной задачей. Сегодня битовые операции всё еще актуальны, особенно в задачах, требующих высокой производительности.

Примеры применения битовых операций

Битовые операции выполняются на уровне процессора и требуют минимального количества тактов. Поэтому они особенно эффективны в задачах, где низкоуровневые операции могут уменьшить общую нагрузку. Рассмотрим подробнее несколько ключевых областей применения: оптимизацию кода, криптографию и обработку изображений.

Оптимизация кода

Битовые операции могут существенно улучшить производительность программ, манипулируя данными на низком уровне.

  1. Флаги и состояния. Флаги и состояния могут обозначать состояния, условия или конфигурацию, причем сохранять информацию о нескольких состояниях или условиях в одном числе с помощью битов. Например, с помощью флага можно обозначить разрешение на чтение или запись файла.
  2. Быстрая арифметика. В таких процессах, как обработка сигналов, например, в игровых приложениях, битовые операции используются для быстрого умножения и деления на степени двойки. Чем быстрее идет вычисление, тем эффективнее обрабатывается сигнал и тем меньше шанс, что работа приложения замедлится даже при высокой нагрузке.

Попробуйте себя в Frontend-разработке

Начать с 5 бесплатных уроков

Криптография

В криптографических алгоритмах манипуляции с данными на уровне отдельных битов необходимы для шифрования и дешифрования с целью обеспечения безопасности.

  1. Шифрование XOR. Один из самых простых методов шифрования — использование побитового исключающего ИЛИ (XOR). С его помощью ключ шифрования применяется к определенным данным, изменяя их, а затем возвращает исходное сообщение с помощью того же ключа.
  2. Хеширование и контрольные суммы. Манипуляция битами используется в алгоритмах хеширования, например SHA, MD5, для создания уникальных контрольных сумм данных. Эта возможность неоценима, например, в криптовалютах, где хеширование используется для подтверждения транзакций и подтверждает, что данные не были изменены.

Обработка изображений

Цифровое изображение состоит из пикселей, которые, в свою очередь, состоят из битов, каждый из которых отвечает за определенный цвет (компоненту). Работа с компонентами позволяет менять цвет изображения, применять фильтры и маски, улучшать или уменьшать качество изображения.

Основные битовые операции в JavaScript

Побитовое И (AND) (&)

Операция выполняется между двумя числами: каждый бит в результате равен 1, только если соответствующие биты в обоих числах равны 1.

const a = 5; // 0101

const b = 3; // 0011

const result = a & b; // 0001

console.log(result); // 1

Побитовое ИЛИ (OR) (|)

Каждый бит в результате равен 1, если хотя бы один из соответствующих битов в двух числах равен 1.

const a = 5; // 0101

const b = 3; // 0011

const result = a | b; // 0111

console.log(result); // 7

Побитовое исключающее ИЛИ (XOR) ()

Каждый бит в результате равен 1, если соответствующие биты в двух числах различны.

const a = 5; // 0101

const b = 3; // 0011

const result = a ^ b; // 0110

console.log(result); // 6

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

Инвертирует каждый бит числа, превращая 1 в 0 и наоборот.

const a = 5; // 0101

const result = ~a; // 1010 (в десятичной системе -6)

console.log(result); // -6

Логический сдвиг влево (<<)

Сдвигает все биты числа на указанное количество позиций влево, добавляя нули справа.

const a = 5; // 0101

const result = a << 1; // 1010

console.log(result); // 10

Рекомендуем попробовать

5 бесплатных уроков Frontend

Логический сдвиг вправо (>>)

Сдвигает все биты числа на указанное количество позиций вправо, сохраняя знак числа.

const a = 5; // 0101

const result = a >> 1; // 0010

console.log(result); // 2

Знаковый сдвиг вправо (>>>)

Сдвигает все биты числа на указанное количество позиций вправо, заполняя левые биты нулями.

const a = -5; // 11111011 (в двоичной системе)

const result = a >>> 1; // 01111101

console.log(result); // 2147483645

Заключение

Битовые операции в JavaScript-программировании позволяют эффективно манипулировать данными на низком уровне, что особенно полезно в задачах, требующих высокой производительности.

Для дальнейшего изучения битовых операций и их применения рекомендуем

курс по фронтенд-разработке от компании Хекслет.

Этот курс поможет вам углубить знания в области программирования и освоить передовые техники разработки.

Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 19 сентября
профессия
от 6 300 ₽ в месяц
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 19 сентября
профессия
от 6 183 ₽ в месяц
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 19 сентября
профессия
от 6 300 ₽ в месяц
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 19 сентября
профессия
от 5 025 ₽ в месяц
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 19 сентября
профессия
от 6 300 ₽ в месяц
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 19 сентября
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 19 сентября
профессия
от 9 900 ₽ в месяц
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 19 сентября
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 19 сентября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
в разработке
Старт 19 сентября