Так как в предыдущей статье, я впервые использовал логическую операцию, расскажу, какие они бывают, сколько их и как ими пользоваться.
В С++ существует три логические операции:
- Логическая операция И
&&, нам уже известная; - Логическая операция ИЛИ
||; - Логическая операция НЕ
!или логическое отрицание.
Логические операции образуют сложное (составное) условие из нескольких простых (два или более) условий. Эти операции упрощают структуру программного кода в несколько раз. Да, можно обойтись и без них, но тогда количество ифов увеличивается в несколько раз, в зависимости от условия. В следующей таблице кратко охарактеризованы все логические операции в языке программирования С++, для построения логических условий.
| Операции | Обозначение | Условие | Краткое описание |
|---|---|---|---|
| И | && | 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 с последующих сравнениях после объявления двух переменных. Или это играет какую-то роль?
#include <iostream> using namespace std; int main(int argc, char* argv[]) { bool a1 = 1, a2 = 0; // объявление логических переменных cout << "Tablica istinnosti log operacii &&" << endl; cout << "true && false: " << ( a1 && a2 ) << endl // логическое И << "false && true: " << ( a2 && a1 ) << endl << "true && true: " << ( a1 && a1 ) << endl << "false && false: " << ( a2 && a2 ) << endl; cout << "Tablica istinnosti log operacii ||" << endl; cout << "true || false: " << ( a1 || a2 ) << endl // логическое ИЛИ << "false || true: " << ( a2 || a1 ) << endl << "true || true: " << ( a1 || a1 ) << endl << "false || false: " << ( a2 || a2 ) << endl; cout << "Tablica istinnosti log operacii !" << endl; cout << "!true: " << ( ! a1 ) << endl // логическое НЕ << "!false: "<< ( ! a2 ) << endl; cin.get(); return 0; }Zeg0
Можно запутаться в коде если большая программа.
PayL
У меня то программа меньше