Поразрядные логические операции C++
В С++ существуют три поразрядные логические операции:
- поразрядное И, обозначение:
&
- поразрядное исключающее ИЛИ, обозначение:
^
- поразрядное включающее ИЛИ, обозначение:
|
Так же в С++ существуют логические операции: ИЛИ — ||
; И — &&
. У многих возникает вопрос, “Чем отличаются операции: &
и &&
; |
и ||
?”. Ответ на этот вопрос можно получить, если понять принцип работы поразрядных логических операций. Сразу могу сказать одно, что логические операции &&
и ||
используются только для построения логических условий. Тогда как поразрядные логические операции применяются в бинарной арифметике. Данные операции работают с битами ячеек памяти, причём операнды и результат могут быть заданы в другой форме, например, в десятичной. Дальше рассмотрим каждую из операций подробно.
Поразрядная логическая операция И.
Обозначения: X, Y – операнды; F – результат выполнения логической операции
X | Y | F |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Из таблицы истинности видно, что результат будет нулевым, если хотя бы один из битов 0. Если оба бита равны 1, то результат равен 1.
Пример с числами:
Для упрощения вычислений возьмем четырёхразрядные(4-х разрядный двоичный код) положительные операнды. Сначала переводим числа в двоичный код, а потом выполняем операцию.
& 1001 = 9 & 1010 = 10
1001 = 9 1000 = 8
Результат равен 9. Результат равен 8.
Поразрядное исключающее ИЛИ.
X | Y | F |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Из таблицы истинности видно, что результат будет нулевым, если оба бита будут равны, во всех остальных случаях результат равен 1.
Пример с числами:
^ 1001 = 9 ^ 1010 = 10
0110 = 6 0010 = 2
Результат равен 6. Результат равен 2.
Поразрядное включающее ИЛИ.
X | Y | F |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Из таблицы истинности видно, что результат будет нулевым, если оба бита будут равны 0, во всех остальных случаях результат равен 1.
Пример с числами:
1111 = 15 1000 = 8
| 1001 = 9 | 1010 = 10
1111 = 15 1010 = 10
Результат равен 15. Результат равен 10.
Все вычисления проводились только с положительными числами, что же касается отрицательных чисел, то результат формируется несколько иначе, но это уже материал схемотехники а не программирования, а если честно, то ничего сложно там нет. Далее показан пример программы с использованием поразрядных логических операций.
При использовании поразрядных логических операций в логических условиях результат получается такой же, как и при использовании логических операций && ||
. И это понятно, так как логика у них одинакова!!
В С++ ложному условию соответствует нулевое значение, а истинному любое целое значение большее нуля. Так что константы true
и false
интерпретируются как целые числа, после чего поразрядные логические операции поразрядно формируют результат условия. Но прямое назначение поразрядных логических операций – это бинарная арифметика.