C++. Логические операции. Поразрядные логические операции. Операции сдвига. Операция XOR
Содержание
- 1. Для каких типов можно применять логические операции, поразрядные логические операции и операции сдвига?
- 2. Какие логические операции используются в C/C++?
- 3. Таблица истинности логических операций
- 4. Примеры использования логических операций в C++
- 5. Какие поразрядные логические операции используются в C/C++?
- 6. Таблица истинности поразрядных логических операций
- 7. Пример работы с логическими побитовыми операциями
- 8. Какие операции сдвига используются в C/C++?
- 9. Примеры использования операций сдвига в программе
- 10. Какое отличие между логическими операциями и поразрядными логическими операциями?
- 11. Как в C++ реализовать логическую операцию XOR?
- Связанные темы
Поиск на других ресурсах:
1. Для каких типов можно применять логические операции, поразрядные логические операции и операции сдвига?
Логические операции, поразрядные логические операции и операции сдвига можно использовать только для операндов целых типов.
2. Какие логические операции используются в C/C++?
В языке программирования C/C++ используются следующие логические операции:
- && – логическое «И»;
- || – логическое «ИЛИ»;
- ! – логическое «НЕТ».
Результатом логических операций есть значение false или true. В языке C++ принято, что значение false считается равным 0, а значение true считается равным 1.
Отсюда можно сделать вывод, что false < true. Например:
// логические операции bool res; res = false < true; // res = true
3. Таблица истинности логических операций
Таблица истинности логических операций && (логическое «И»), || (логическое «ИЛИ»), ! (логическое «НЕТ») имеет следующий вид:
В языке C/C++ принимается, что значение false равно 0, а значение true не равно 0 (любое ненулевое целочисленное значение).
4. Примеры использования логических операций в C++
Пример 1. Логическая операция в сочетании с логическим выражением
// логические операции bool res; int a, b; // операция && (AND) a = 8; b = 5; res = a && b; // res = True a = 0; res = a && b; // res = False // операция || (OR) a = 0; b = 0; res = a || b; // res = False b = 7; res = a || b; // res = True // операция ! (логическое "НЕТ") a = 0; res = !a; // res = True a = 15; res = !a; // res = False
Пример 2. Логическая операция в условных выражениях. Приведен фрагмент кода, в котором логическая операция используется в операторе условного перехода if.
// логические операции в условных выражениях int a, b; bool res; a = 0; b = 3; res = false; if (a && b) res = true; // res = false a = 0; b = 7; if (a || b) res = true; // res = true
5. Какие поразрядные логические операции используются в C/C++?
Язык С/С++ поддерживает следующие поразрядные логические операции:
- & – поразрядное логическое И (AND);
- ^ – поразрядное сложение по модулю 2 (XOR — исключающее ИЛИ);
- | – поразрядное логическое ИЛИ (OR);
- ~ – поразрядная инверсия (NOT).
Операции &, ^, | есть бинарными. Это означает, что они требуют двух операндов. Биты любого операнда сравниваются между собой по следующему правилу: бит в позиции 0 первого операнда сравнивается с битом в позиции 0 второго операнда. Затем бит в позиции 1 первого операнда сравнивается с битом в позиции 1 второго операнда. Так сравниваются все биты целочисленных операндов.
6. Таблица истинности поразрядных логических операций
Каждый бит результата определяется на основе двух операндов, которые являются битами, так как показано в таблице.
Инверсия требует единого операнда справа от знака ~. Результат получается поразрядной инверсией всех битов операнда.
7. Пример работы с логическими побитовыми операциями
Пусть даны два числа 17 и 45 типа unsigned short int. Каждое из чисел занимает в памяти 1 байт или 8 бит. Ниже приведен пример того, как происходит вычисление для каждой побитовой операции
Как видно из примера, происходит выполнение заданной операции над каждым битом.
8. Какие операции сдвига используются в C/C++?
Язык С/С++ включают две операции поразрядного сдвига:
- << – сдвиг влево значения операнда на заданное количество бит. Операнд размещается слева от знака операции. Число сдвигаемых бит указывается справа от знака операции;
- >> – сдвиг вправо значения операнда на заданное количество бит. Операнд размещается слева от знака операции (<<). Количество сдвигаемых бит размещается справа от знака операции.
Выдвижные биты теряются, а «входят» нулевые биты. Сдвиг операндов влево на 1, 2, 3 и более разрядов – наиболее быстрый способ умножения на 2, 4, 8, … Сдвиг операндов вправо на 1, 2, 3 и более разрядов – наиболее быстрый способ деления на 2, 4, 8, …
Если в программе нужно, чтобы операция умножения целочисленных операндов на 2, 4, 8 и т.д. происходила максимально быстро, то целесообразно использовать операцию сдвига влево.
Это касается и случаев, когда нужно максимально быстро поделить целочисленный операнд на 2, 4, 8 и т.д. В этих случаях рекомендуется использовать сдвиг вправо.
9. Примеры использования операций сдвига в программе
// Операции сдвига int a; int b; int c; a = 15; b = -5; // сдвиг влево - умножение c = a << 1; // c = a * 2^1 = 30 c = b << 2; // c = b * 2^2 = -20 // сдвиг вправо - деление c = a >> 3; // c = a / 2^3 = 1 c = b >> 1; // c = b / 2^1 = -3
10. Какое отличие между логическими операциями и поразрядными логическими операциями?
В логических операциях сравнивается значение двух операндов целиком. Каждый из операндов может иметь значение true или false. Язык C/C++ допускает сравнение операндов, которые являются целыми числами. В этом случае целочисленное значение 0 соответствует значению false, а ненулевое (любое другое) значение соответствует значению true.
Поразрядные логические операции работают строго с битами любого операнда. Бит может иметь 2 значения: 0 или 1. Поэтому, вычислению подлежат соответствующие биты каждого операнда а не значение операнда в целом.
11. Как в C++ реализовать логическую операцию XOR?
Как известно, язык C++ не содержит встроенной логической операции XOR (исключающее «ИЛИ»).
Ниже приведен фрагмент кода, который реализует операцию XOR с помощью использования операций && (AND), || (OR), ! (NOT).
// реализация операции XOR через операции && (AND), || (OR), ! (NOT) bool x, y; bool res; ... res = (x || y) && !(x && y); ...
В вышеприведенном программном коде:
- x, y – переменные, для которых вычисляется операция XOR;
- res – переменная, которая есть результатом вычисления.
Связанные темы
- Арифметические операции
- Операции отношений
- Операторы инкремента (++) и декремента (—). Составные операторы присваивания (+=, -= …)
- Таблица приоритетности операций