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

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

В С++ существует три логические операции:

  1. Логическая операция И &&, нам уже известная;
  2. Логическая операция ИЛИ ||;
  3. Логическая операция НЕ ! или логическое отрицание.

Логические операции образуют сложное (составное) условие из нескольких простых (два или более) условий. Эти операции упрощают структуру программного кода в несколько раз. Да, можно обойтись и без них, но тогда количество ифов увеличивается в несколько раз, в зависимости от условия. В следующей таблице  кратко охарактеризованы все логические операции в языке программирования С++, для построения логических условий.

Таблица 1 — Логические операции С++
Операции Обозначение  Условие Краткое описание
И && 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).

CppStudio.com
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 (истина)». Коротко поясню некоторые моменты. Составное условие с использованием логического И истинно только в том случае, когда истинны оба простых условия. Во всех остальных случаях составное условие ложно. Составное условие с использованием логического ИЛИ ложно только в том случае, когда ложные оба простых условия. Во всех остальных случаях составное условие истинно. Логическое отрицание НЕ является унарной операцией, и она не комбинирует два условия, в отличие от логических операций И и ИЛИ, которые являются бинарными операциями. Логическое отрицание позволяет перевернуть смысл условия, что в некоторых случаях очень удобно. Условие с логическим отрицанием истинно в том случае, если это же условие ложно без отрицания, и наоборот.

Практика

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

Автор: admin
Дата: 25.08.2012
Поделиться:

Комментарии

  1. CharlesNah

    CharlesNah

    Цена указана за базовый комплект, который включает в себя: Шкаф 3-х дв. для платья и белья 111/531, Кровать 2-х спальная 1,6 м 112/54М, Комод

    [b]Перейти на сайт —>[/b] http://1stbest.info/

  2. mpavelFax

    Официальная работа в интернете

  3. Влад Метр

    Пожалуйста помогите кто то с вопросом «С точки зрения языка с++ какое выражение является ложным?

    1)Если =0;

    2)если =1;

    3)если не =0.

  4. Boss

    Небольшое дополнение к информации, указанной в статье (правило Short Circuit Evaluation):

    Если при работе с булевыми операциями «И», «ИЛИ» анализ первого параметра позволит определить итоговый ответ, то анализ второго параметра не производится, а ответ выдается сразу.

    Пример:

    (0 && 1) — машина анализирует первый параметр, который есть false. Следовательно, она не будет анализировать второй параметр, а сразу выдаст ответ — false (0);

    Аналогично, (1 || 0) — программа проанализирует только первый параметр, равный 1 (true) и без анализа второго параметра выдаст ответ «true».

    Более подробно — http://en.wikipedia.org/wiki/Short-circuit_evaluation

  5. 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;

      Как-то так.

       

  6. 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;
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.