В этой статье
Что такое двоичная арифметика?
Двоичная арифметика -- это математика в системе счисления с основанием 2, использующая только цифры 0 и 1. Каждый цифровой компьютер обрабатывает данные как двоичные на аппаратном уровне -- целые числа, числа с плавающей запятой, адреса памяти и даже текст хранятся и обрабатываются как последовательности битов. Понимание двоичной системы необходимо для низкоуровневого программирования, сетевых технологий и цифровой логики.
Помимо простого сложения и вычитания, двоичная арифметика включает побитовые операции: AND, OR, XOR, NOT и сдвиги битов. Эти операции работают с отдельными битами и являются фундаментальными для таких задач, как установка флагов разрешений, вычисление контрольных сумм, маскирование IP-адресов и оптимизация критичного к производительности кода.
Как работают побитовые операции
Побитовые операторы обрабатывают целые числа бит за битом. Каждая операция имеет таблицу истинности, определяющую выход для каждой комбинации входных битов.
- AND, OR, XOR -- AND (&) возвращает 1 только когда оба бита равны 1, OR (|) возвращает 1 когда любой бит равен 1, а XOR (^) возвращает 1 когда биты различаются. Используются для маскирования, объединения флагов и переключения битов
- NOT и сдвиги -- NOT (~) инвертирует все биты, сдвиг влево (<<) умножает на степени 2, а сдвиг вправо (>>) делит на степени 2. Арифметический сдвиг вправо сохраняет знаковый бит для отрицательных чисел
- Дополнение до двух -- современные компьютеры представляют отрицательные целые числа с помощью дополнения до двух, где -1 -- это все биты в 1. Это позволяет одному и тому же оборудованию выполнять как сложение, так и вычитание без отдельной схемы
Попробуйте бесплатно — без регистрации
Рассчитать двоичные операции →Когда использовать побитовые операции
Побитовые операции используются в системном программировании, сетевых технологиях и приложениях, чувствительных к производительности.
- Флаги разрешений -- разрешения файлов Unix (rwxr-xr-x = 0755) используют битовые поля, где каждый бит представляет конкретное разрешение, проверяемое с помощью AND и устанавливаемое с помощью OR
- Маски подсетей -- сетевые инженеры используют операции AND между IP-адресами и масками подсетей для определения границ сети и правильной маршрутизации трафика
- Графика и манипулирование цветами -- цвета пикселей, хранящиеся как целые числа 0xRRGGBB, используют сдвиги битов и маски для извлечения или изменения отдельных красного, зелёного и синего каналов
Часто задаваемые вопросы
В чём разница между знаковыми и беззнаковыми целыми числами?
Беззнаковые целые числа используют все биты для величины, поэтому 8-битное беззнаковое целое имеет диапазон от 0 до 255. Знаковые целые числа резервируют старший бит для знака (положительный или отрицательный), поэтому 8-битное знаковое целое имеет диапазон от -128 до 127 в дополнении до двух. Выбор влияет на поведение операций сдвига вправо и сравнения.
Сдвиг битов -- это то же, что умножение или деление на 2?
Сдвиг влево на n позиций эквивалентен умножению на 2^n для неотрицательных целых чисел. Сдвиг вправо делит на 2^n, но поведение для отрицательных чисел зависит от типа сдвига: арифметический (сохраняет знак) или логический (заполняет нулями). В большинстве языков >> -- арифметический для знаковых типов, а >>> (где доступен) -- логический.
Почему побитовые операции всё ещё актуальны в современном коде?
Побитовые операции широко используются во флагах функций, системах разрешений, сетевых протоколах, криптографии, хэш-функциях, рендеринге графики и сжатии данных. Они выполняются за один такт процессора и не используют дополнительную память, что делает их идеальными для критичных к производительности путей. Современные фреймворки также используют их внутренне -- React использует их для флагов эффектов, а Linux -- для разрешений файлов.