09-06-2018 12:04

Побитовые операции. Программирование на C и C++

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

Основа вычислений

Двоичная цифровая система использует только две цифры — 0 и 1. Компьютеры работают в двоичном формате, что означает, что они хранят данные и выполняют вычисления, используя только нули и единицы.

Программа для создания текстовых документов: что это, и какие можно встретить разновидности редакторов?Вам будет интересно:Программа для создания текстовых документов: что это, и какие можно встретить разновидности редакторов?

Хотя одна бинарная цифра может использоваться для представления True (1) (истина) или False (0) (ложь) в логике, для хранения больших чисел и выполнения сложных функций можно использовать несколько двоичных цифр. Фактически любое число может быть представлено в двоичном формате.

Применение

Побитовые операторы используются в следующих областях:

  • C Thread - это что такое?Вам будет интересно:C Thread - это что такое?

    Коммуникационные стеки, где отдельные биты в заголовке, прикрепленные к данным, несут важную информацию.

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

  • Низкоуровневое программирование для таких приложений, как драйверы устройств, криптографическое программное обеспечение, ПО для декодирования видео, распределители памяти, программное обеспечение для сжатия и графики.

  • Удобное ведение больших наборов целых чисел в задачах поиска и оптимизации.

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

" class="page-contents-link">

Побитовые операции — как это работает?

В отличие от обычных логических операторов (например, +, -, *), которые работают с байтами или группами байтов, побитовые операторы могут проверять или устанавливать каждый из отдельных битов в байте. Побитовые операции никогда не вызывают переполнения в ячейках памяти, потому что результат, полученный после выполнения операции, находится в пределах диапазона возможных значений для числового типа.

Бинарные коды: отзывы, комментарии, вопросы, ответыВам будет интересно:Бинарные коды: отзывы, комментарии, вопросы, ответы

Побитовые операторы, используемые в семействе языков C (C #, C и C ++):

  • OR (|) — результат является истиной, если любой из операндов истинен.

  • AND (&) — результат верен, только если оба операнда верны. Его можно использовать для настройки маски проверки значений определенных битов.

  • XOR (^) — результат является истиной, только если один из его операндов истинен. Он используется, в основном, для переключения определенных бит. Он также помогает заменять две переменные без использования третьей.

  • NOT (~) — побитовое дополнение или инверсия. Предоставляет поразрядное дополнение к операнду путем инвертирования его значения, так что все нули превращаются в единицы, а все единицы превращаются в нули.

  • >> (Right-Shift) и << (Left-Shift) — оператор, который перемещает биты в число позиций, заданных вторым операндом в правом или левом направлении. Операторы сдвига используются для выравнивания битов.

" class="page-contents-link">

Пример работы

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

Логическая операция AND (&) каждой битовой пары приводит к 1 (истине), если первый и второй биты равны 1. В противном случае результат равен нулю. Среди других применений AND может использоваться для проверки отдельных битов в битовой строке, чтобы увидеть, являются ли они ложным или истинным значением.

Рассмотрим подробнее на примере:

IsOdd = (ValueToTest & 1)! = 0.

Логическая операция ИЛИ (|) каждой битовой пары приводит к 1, если первый или второй бит равен 1. В противном случае результат равен нулю. Логическая операция XOR (~) каждой битовой пары приводит к 1, если два бита различны, и 0, если они одинаковы.

Логический оператор NOT представлен как ^. Левый сдвиг (<<), правый сдвиг (>>) и правый сдвиг нулевой заливки (>>>>) иногда упоминаются как побитовые операторы и называются операторами сдвига бит.

Приоритезация

Порядок приоритетности (от наивысшего до самого низкого) в побитовых операторах при программировании на C:

  • NOT;

  • Right-Shift и Left-Shift);

  • AND;

  • XOR;

  • OR.

Данные операнды используются в большинстве языков программирования. Например, при написании кода в Javascript побитовые операции будет теми же, что и вышеперечисленные. Это вызвано базовыми математическими основами, на которых базируется программный код. В частности, побитовые операции в Java, в свою очередь, полностью тождественны Javascript.

Бит и программирование на C и других языках

Бит является наименьшей единицей измерения, используемой для количественной оценки компьютерных данных. Он содержит одно двоичное значение — 0 или 1.
Хотя один бит может определять логическое значение True (1) или False (0), как отдельная единица он используется редко. Поэтому в компьютерном хранилище биты часто группируются в 8-битные кластеры, называемые байтами. Поскольку байт содержит восемь бит, каждый из которых имеет два возможных значения, в побитовых операциях в Си (язык программирования) один байт может иметь 28 или 256 различных значений.
Термины «биты» и «байты» часто путаются и даже используются взаимозаменяемо, поскольку звучат одинаково и оба сокращаются буквой «Б». Однако при правильном написании биты сокращаются в нижнем регистре «b», а байты сокращаются в верхнем регистре — «B». Важно не путать эти два термина, так как любое измерение в байтах содержит в восемь раз больше бит. Например, небольшой текстовый файл размером 4 КБ содержит 4000 байт или 32 000 бит.

Как правило, файлы, устройства хранения и емкость хранилища измеряются в байтах, а скорости передачи данных измеряются в битах. Например, карта памяти SSD может иметь емкость 240 ГБ, тогда как загрузка может переноситься со скоростью 10 Мбит/с. Кроме того, биты также используются для описания архитектуры процессора, такой как 32-разрядный или 64-разрядный процессор.

Побитовые операции в паскале

Побитовый уровень операций в паскале включает в себя работу с отдельными битами, которые являются наименьшими единицами данных на компьютере. Хотя компьютеры способны манипулировать битами, они обычно хранят данные и выполняют инструкции в битовых кратных значениях, называемых байтами. Большинство языков программирования, в том числе побитовые операции в Delphi, управляют группами из 8, 16 или 32 бит.

Описание процесса

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

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

  • шифрование;

  • сжатие;

  • графику;

  • связь по портам/сокетам;

  • программирование встроенных систем;

  • машины с конечным состоянием.

Побитовый оператор работает с двоичным представлением числа, а не с его значением. Операнд рассматривается как набор бит, а не как один номер. Побитовые операторы аналогичны в большинстве поддерживающих их языков — C, Java, JavaScript, Python и Visual Basic.

Почему это важно использовать?

Побитовые операции абсолютно необходимы при программировании аппаратных регистров во встроенных системах. Каждый процессор имеет один или несколько регистров (обычно определенный адрес памяти), которые контролируют, включено ли прерывание или отключено. Чтобы позволить прерыванию запускать обычный процесс, необходимо установить бит разрешения для этого типа прерывания, а главное, не изменять ни один из остальных битов в регистре.Когда прерывание срабатывает, оно обычно устанавливает бит в регистре состояния, так что одна служебная процедура может определять точную причину прерывания. Тестирование отдельных битов позволяет быстро декодировать источник прерываний.
Во многих встроенных системах общая доступная оперативная память может быть 64, 128 или 256 байт. В этой среде обычно используется один байт для хранения нескольких элементов данных и булевых флагов, а затем используются битовые операции для установки и чтения их.



Источник