Так как в предыдущей статье, я впервые использовал логическую операцию, расскажу, какие они бывают, сколько их и как ими пользоваться.
В С++ существует три логические операции:
- Логическая операция И
&&
, нам уже известная; - Логическая операция ИЛИ
||
; - Логическая операция НЕ
!
или логическое отрицание.
Логические операции образуют сложное (составное) условие из нескольких простых (два или более) условий. Эти операции упрощают структуру программного кода в несколько раз. Да, можно обойтись и без них, но тогда количество ифов увеличивается в несколько раз, в зависимости от условия. В следующей таблице кратко охарактеризованы все логические операции в языке программирования С++, для построения логических условий.
Операции | Обозначение | Условие | Краткое описание |
---|---|---|---|
И | && | a == 3 && b > 4 | Составное условие истинно, если истинны оба простых условия |
ИЛИ | || | a == 3 || b > 4 | Составное условие истинно, если истинно, хотя бы одно из простых условий |
НЕ | ! | !( a == 3) | Условие истинно, если a не равно 3 |
Сейчас следует понять разницу между логической операцией И и логической операцией ИЛИ , чтобы в дальнейшем не путаться. Пришло время познакомиться с типом данных bool
–логический тип данных. Данный тип данных может принимать два значения: true
(истина) и false
(ложь). Проверяемое условие в операторах выбора имеет тип данных bool
. Рассмотрим принцип работы следующей программы, и все будет понятно со всеми этими логическими операциями.
// or_and_not.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv[]) { bool a1 = true, a2 = false; // объявление логических переменных bool a3 = true, a4 = false; cout << "Tablica istinnosti log operacii &&" << endl; cout << "true && false: " << ( a1 && a2 ) << endl // логическое И << "false && true: " << ( a2 && a1 ) << endl << "true && true: " << ( a1 && a3 ) << endl << "false && false: " << ( a2 && a4 ) << endl; cout << "Tablica istinnosti log operacii ||" << endl; cout << "true || false: " << ( a1 || a2 ) << endl // логическое ИЛИ << "false || true: " << ( a2 || a1 ) << endl << "true || true: " << ( a1 || a3 ) << endl << "false || false: " << ( a2 || a4 ) << endl; cout << "Tablica istinnosti log operacii !" << endl; cout << "!true: " << ( ! a1 ) << endl // логическое НЕ << "!false: "<< ( ! a2 ) << endl; system("pause"); return 0; }
Строки 9 и 10 вам должны быть понятны, так как здесь инициализируются переменные типа bool
. Причем каждой переменной присваивается значение true
или false
. Начиная с 9-й строки и заканчивая 20-й, показано использование логических операций. Результат работы программы (см. Рисунок 1).
Tablica istinnosti log operacii && true && false: 0 false && true: 0 true && true: 1 false && false: 0 Tablica istinnosti log operacii || true || false: 1 false || true: 1 true || true: 1 false || false: 0 Tablica istinnosti log operacii ! !true: 0 !false: 1 Для продолжения нажмите любую клавишу . . .
Рисунок 1 — Логические операции С++
Наверное, у вас возникает вопрос, «А что это за нолики и единички?». Если есть вопрос, то на него нужно ответить. Отвечаю: «Нолик-это представление логического значения false
(ложь), ну а единички – это логическое true
(истина)». Коротко поясню некоторые моменты. Составное условие с использованием логического И истинно только в том случае, когда истинны оба простых условия. Во всех остальных случаях составное условие ложно. Составное условие с использованием логического ИЛИ ложно только в том случае, когда ложные оба простых условия. Во всех остальных случаях составное условие истинно. Логическое отрицание НЕ является унарной операцией, и она не комбинирует два условия, в отличие от логических операций И и ИЛИ, которые являются бинарными операциями. Логическое отрицание позволяет перевернуть смысл условия, что в некоторых случаях очень удобно. Условие с логическим отрицанием истинно в том случае, если это же условие ложно без отрицания, и наоборот.
Комментарии
CharlesNah
Цена указана за базовый комплект, который включает в себя: Шкаф 3-х дв. для платья и белья 111/531, Кровать 2-х спальная 1,6 м 112/54М, Комод
[b]Перейти на сайт —>[/b] http://1stbest.info/
mpavelFax
Официальная работа в интернете
Влад Метр
Пожалуйста помогите кто то с вопросом «С точки зрения языка с++ какое выражение является ложным?
1)Если =0;
2)если =1;
3)если не =0.
Boss
Небольшое дополнение к информации, указанной в статье (правило Short Circuit Evaluation):
Если при работе с булевыми операциями «И», «ИЛИ» анализ первого параметра позволит определить итоговый ответ, то анализ второго параметра не производится, а ответ выдается сразу.
Пример:
(0 && 1) — машина анализирует первый параметр, который есть false. Следовательно, она не будет анализировать второй параметр, а сразу выдаст ответ — false (0);
Аналогично, (1 || 0) — программа проанализирует только первый параметр, равный 1 (true) и без анализа второго параметра выдаст ответ «true».
Более подробно — http://en.wikipedia.org/wiki/Short-circuit_evaluation
ComeOn9iga
на сколько я понял, логические операции работают также с типами данных кроме bool, в этом случае они принимают значение true в случае, если переменная отлична от нуля, и false, если переменная равна 0, как и с переменными типа char. В связи с этим вопрос, есть ли возможность работать с логическими операциями, в случае, если переменная в бинарном представлении длиннее одного бита? 0011 && 1100 = 0000, 0011||1100=1111 к примеру
Vasja
Существует 2 типа таких операций:
!, ||, && — операции над типом bool? к которому в случае надобности приводятся остальные типы (по возможности).
!, |, &, а также <<, >> — поразрядные булевы операции над перечислимыми типами.
Так вот ваш пример будет выглядеть по разному:
0011 && 1100 = true && true = true; 0011 || 1100 = true || true = true;
0011 & 1100 = 0000; 0011|1100=1111;
Как-то так.
PayL
Разве не достаточно только двух переменных a1 и a2 для получения того-же результата? Сделать a3=a1 и a4=a2 с последующих сравнениях после объявления двух переменных. Или это играет какую-то роль?
Zeg0
Можно запутаться в коде если большая программа.
PayL
У меня то программа меньше