Как установить, сбросить, проверить нужный бит или битовые операции

Введение

Булевы операции и математическая логика

Булевы операции очень близки (хотя и не тождественны) логическим связкам в классической логике. Бит можно рассматривать как логическое суждение — его значениями являются 1 «истина» и 0 «ложь». При такой интерпретации известные в логике связки конъюнкции, дизъюнкции, импликации, отрицания и другие имеют представление на языке битов. И наоборот, битовые операции легко описываются на языке исчисления высказываний.

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

Булевы операции как основа цифровой техники

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

Логические операции

Логическая операция — операция над высказываниями, позволяющая составлять новые высказывания путём соединения более простых. В качестве основных операций обычно называют конъюнкцию (∧ или &), дизъюнкцию (∨ или |), импликацию (→), отрицание (¬), эквивалентность (=), исключающее ИЛИ (⊕).

Таблица истинности логических операций

a b a ∧ b a ∨ b ¬a ¬b a → b a = b a ⊕ b
1 1 1 1
1 1 1 1 1
1 1 1 1
1 1 1 1 1 1

Видеоинструкция к калькулятору

Используемые символы

В качестве переменных используются буквы латинского и русского алфавитов (большие и маленькие), а также цифры, написанные после буквы (индекс переменной). Таким образом, именами переменных будут: a, x, a1, B, X, X1, Y1, A123 и так далее.

Для записи логических операций можно использовать как обычные символы клавиатуры (*, +, !, ^, ->, =), так и символы, устоявшиеся в литературе (, , ¬, , , ). Если на вашей клавиатуре отсутствует нужный символ операции, то используйте клавиатуру калькулятора (если она не видна, нажмите «Показать клавиатуру»), в которой доступны как все логические операции, так и набор наиболее часто используемых переменных.

Для смены порядка выполнения операций используются круглые скобки ().

Обозначения логических операций

  • И (AND):&*
  • ИЛИ (OR):+
  • НЕ (NOT):¬!
  • Исключающее ИЛИ (XOR):^
  • Импликация:->=>
  • Эквивалентность:=~<=>
  • Штрих Шеффера:|
  • Стрелка Пирса:

Что умеет калькулятор

  • Строить таблицу истинности по функции
  • Строить таблицу истинности по двоичному вектору
  • Строить совершенную конъюнктивную нормальную форму (СКНФ)
  • Строить совершенную дизъюнктивную нормальную форму (СДНФ)
  • Строить полином Жегалкина (методами Паскаля, треугольника, неопределённых коэффициентов)
  • Определять принадлежность функции к каждому из пяти классов Поста
  • Строить карту Карно
  • Минимизировать ДНФ и КНФ
  • Искать фиктивные переменные

Сдвиг битов вправо с сохранением знака (>>)

Оператор >> (сдвиг битов вправо с сохранением знака) в точности противоположен сдвигу влево. Слева от оператора >> указывается операнд, биты которого будут сдвинуты, а справа – целое число в диапазоне от 0 до 31, которое определяет на сколько разрядов вправо будут сдвинуты биты операнда.

Если операнд положительный, то пустые места слева заполняются нулями. Если же изначально мы работаем с отрицательным числом, то все пустые места заполняются единицами. Это делается для сохранения знака, представленного крайним-левым битом. Поэтому он назван «переносящим знак».

В следующем примере выполняется сдвиг битов вправо на 2 разряда для чисел 9 и -9:

Выполнить код »

На заметку: Побитовый сдвиг вправо на N позиций эквивалентен делению этого числа на 2N. Побитовый сдвиг выполняется намного быстрее обычного деления.

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

Побитовое ИЛИ (|) выполняет булеву операцию дизъюнкции над каждой парой битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. Другими словами, результат a | b равен , если оба соответствующих бита операндов равны ; если же хотя бы один бит из пары равен 1, результирующий двоичный разряд равен 1.

Таблица истинности для этой операции выглядит так:

a b a | b
1 1
1 1
1 1 1

В следующем примере поразрядное ИЛИ выполняется для чисел 38 и 3:

Выполнить код »

Каждый единичный бит любого из операндов переходит в результат. В итоге, получаем 1001112, или 3910.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий