Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_4_Операции_и_выражения.doc
Скачиваний:
10
Добавлен:
05.11.2018
Размер:
660.99 Кб
Скачать

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

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

Таблица 6.1. Значения логических операций

A

B

&&

||

!B

0

0

0

0

1

0

1

0

1

0

1

0

0

1

1

1

1

1

1

0

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

операция

содержание

&& логическое умножение

e1 && e2 истина, если e1 и e2 – истина;

схема работы - короткая: e1  истина  e2

|| логическое сложение

e1 || e2 истина, если e1 или e2 – истина;

схема работы - короткая: e1  ложь  e2

! логическое отрицание

!e1 истина, если e1 – ложно

приоритеты:

! (самый высокий)

&&

||

a > b && b > c || b > d

1 2 3

4 5

схема вычисления:

короткая

if ((i++ < k) && (j++ > l)) вторая скобка выполняется не всегда

Особенности выполнения логических операций

Компилятор С++ поддерживает короткую схему анализа логического выражения: логическое выражение анализируется слева направо до тех пор, пока не станет очевидным его значение (истина или ложь). После этого дальнейший анализ выражения прекращается, так как значение его уже известно. Например:

  1. При х =1, y =2 значение выражения (x < 2) || (y+x < 5) равно true, что очевидно уже после вычисления первого операнда. Поэтому второй операнд даже не будет вычисляться.

  2. При x =1, y =2 значение выражения (x > 5) && (y+x > 2) равно false, что очевидно уже после вычисления первого операнда, и второй операнд можно не вычислять. Понимание этого факта на самом деле имеет иногда очень важное значение.

  3. Например, при вычислении выражения (++x || ++y && ++z) и при х=2 не произойдет изменения значений y и z, т.к. первый операнд имеет значение true и по нему можно сделать вывод о значении всего выражения, независимо от значения его второй части (++y && ++z).