Урок 6. Логические операторы И / ИЛИ в С++

Уроки для начинающих   15 Февраль 2012  Автор статьи:  

Для работы с bool-евским типом данных существуют следующие типы операций:

  • И (обозначается также * , /\, and , & )
  • ИЛИ (обозначается также + , \/ , or , |)

Таблица

a b a&b a|b
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1

Пример использования:

1
2
3
4
bool a=true;
bool b=false;
bool c=a&b; // c=false
bool d=a|b; // d=true

Для оператора if используется в условии

  • && — если хотите задать условие «И»
  • || — если хотите задать условие «ИЛИ»

Это нужно для того, чтобы в случае выполнения первого условия при операции ИЛИ, второе не проверялось, потому что ответ очевиден.То же самое в случае ложности первого условия при операции И.
Например:

1
2
3
4
5
bool a=true;
bool b=false;
bool c;
if (a && b == false) c = true;
if (a || b) c = false;



Основные операции в Java

  • Dip

    «ИЛИ» (дизъюнкция, логическое сложение) нулей дает ноль
    a   b    a|b0   0     00   1     11   0     11   1     1

  • http://pro-prof.com/ r04

    >> Это нужно для того, чтобы в случае выполнения первого условия при
    операции ИЛИ, второе не проверялось, потому что ответ очевиден.То же
    самое в случае ложности первого условия при операции И.
    Я не видел чтобы это было закреплено в стандарте, оно там есть? (я вкурсе что почти все компиляторы и сделают так, как вы тут описали, но а вдруг…). Вдруг я поверю Вам и напишу

    if (i < n && foo(a[i])) …

    Ну понятно, что если он не сработает так как тут описано — то в foo будет передано что-то невалидное.
    Дак стандарт гарантирует или нет?

    • http://cybern.ru/ lordrp

      Да, я не знаю ни про какой стандарт, я рассказываю про Visual Studio и она сделает так, а как поведут себя другие компиляторы мне все равно, если честно.

  • Павел

    в последнем примере, ты проверяешь if(a&&b == false) c=true;// разве ты не должен взять a&&b в скобки? иначе ты проверяешь только лишь переменную b?

  • Dip

    «ИЛИ» (дизъюнкция, логическое сложение) нулей дает ноль
    a   b    a|b0   0     00   1     11   0     11   1     1

  • http://cybern.ru/ lordrp

    Спасибо, исправили.

Научиться программировать

  • на Delphi

  • на Java

  • на C++