В компьютерном программировании побитовая операция работает с битовой строкой , битовым массивом или двоичным числом (рассматриваемым как битовая строка) на уровне отдельных битов . Это быстрое и простое действие, базовое для высокоуровневых арифметических операций и напрямую поддерживаемое процессором . Большинство побитовых операций представлены как инструкции с двумя операндами, в которых результат заменяет один из входных операндов.
На простых недорогих процессорах обычно побитовые операции выполняются значительно быстрее, чем деление, в несколько раз быстрее, чем умножение, а иногда значительно быстрее, чем сложение. В то время как современные процессоры обычно выполняют сложение и умножение так же быстро, как и побитовые операции, из-за их более длинных конвейеров команд и других архитектурных решений, побитовые операции обычно потребляют меньше энергии из-за меньшего использования ресурсов. [1]
В приведенных ниже пояснениях любое указание на положение бита отсчитывается с правой (наименее значащей) стороны, продвигаясь влево. Например, двоичное значение 0001 (десятичная 1) имеет нули во всех позициях, кроме первой (то есть самой правой).
Побитовое НЕ или дополнение — это унарная операция , которая выполняет логическое отрицание каждого бита, формируя дополнение до единиц данного двоичного значения. Биты, равные 0, становятся равными 1, а биты, равные 1, становятся равными 0. Например:
Побитовое дополнение равно двум дополнениям значения минус один. Если используется арифметика с дополнением до двух, то NOT x = -x − 1
.
Для целых чисел без знака побитовое дополнение числа является «зеркальным отражением» числа посередине диапазона целого числа без знака. Например, для 8-битных целых чисел без знака NOT x = 255 - x
, которые можно визуализировать на графике в виде нисходящей линии, которая эффективно «переворачивает» возрастающий диапазон от 0 до 255 в убывающий диапазон от 255 до 0. Простой, но наглядный пример использования заключается в инвертировании изображения в градациях серого, где каждый пиксель хранится как целое число без знака.