3.3 Условные и
логические выражения.
Тот, кто программировал в среде
языка Паскаль, знает, что любое логическое
выражение может принимать два значения TRUE или FALSE, в
зависимости от того, верно оно или нет. Несколько
по другому обстоят дела в языке Си. Рассмотрим
программу:

После выполнения данной
программы, на экран будет выведена следующая
информация:

Как видно, истинное значение в
Си – 1, а ложное – 0. Теперь рассмотрим программу,
опуская уже известное нам.
true=(20>2); - этот оператор
присваивания примечателен тем, что в нём в
качестве выражения используется оператор
отношения. Условие в круглых скобках верно и
следовательно оно истинно.
false=(20==2); - в этом операторе
тоже используется оператор отношения, но условие
в нём неверно и следовательно оно ложно.
Операции отношения вскользь
уже упоминались. В Си они широко используются для
сравнения. При использовании такой операции,
величина слева от знака сравнивается с величиной
справа от него:
Знаки, обозначающие
соответствующие операции смотри в п.2.3.
Простое условное выражение
состоит из знака операции отношения и операндов,
расположенных слева и справа от него.
(операнд1 операция
операнд2).
Если отношение истинно,
значение выражения равно 1;
если отношение ложно, значение условного
выражения равно 0.
В условных выражениях
разрешается использовать не только числа, но и
символы, причём при сравнении берётся их
машинный код (код ASCII).

Всё, что мы рассмотрели,
аналогично операциям сравнения в языке Паскаль.
Замечание! Так как в Паскале определены
значения булевского типа, то над ними так же
допустимы операции отношения, причём FALSE<TRUE. В Си таких операций нет, хотя 0
всегда меньше 1. Си использует для этого другие
средства.
Заметим, что приоритет операций
отношения считается меньшим, чем у операций
сложения и вычитания, и большим чем у операции
присваивания.

Например, значение выражения x>y+2 то же, что и выражения x>(y+2). А переменная x после выполнения оператора x=5==5; будет равна 1.
Иногда полезно объединять два
или более условных выражения. Например,
определить попадание чисел в заданный интервал
(рис.1) или, наоборот, непопадание в заданный
интервал (рис. 2).

Напомним, что && - логическая операция,
соответствующая операции AND на Паскале.

Операция || - соответствует операции OR языка Паскаль.
Обычно операндами логических
выражений являются условные выражения. Можно
сделать такую запись: (x<a||x>b)==!(x>a&&x<b). Здесь операция ! играет роль операции отрицания.
Данная операция имеет один операнд,
расположенный справа. Остальные операции имеют
два операнда: один слева и один справа.
&& - Логическое И:
результат операции имеет значение 1 (истина), если оба операнда истинны,
и 0 (ложь) в противном
случае.
|| - Логическое ИЛИ:
результат имеет значение 1
(истина), если один или оба операнда истинны, и 0 (ложь) в противном случае.
! – Логическое НЕ:
результат имеет значение 1
(истина), если операнд имеет значение ложь, и
наоборот. Данная операция имеет очень высокий
приоритет, он выше, чем у операции умножения.
Приоритет операций && и || более
низкий, но выше чем операция присваивания (см.
таблицу уровней старшинства).
Надо заметить, что язык Си
гарантирует вычисление логической операции
слева направо. Также гарантируется, что, как
только обнаружиться элемент, значение которого
устанавливает ложность всего выражения,
вычисление прекращается.

Впрочем, в последних версиях
компиляторов языка Паскаль, реализованы такие же
возможности. Как видно из примера, если значение
переменной num равно 0, то всё выражение ложно, и поэтому
дальнейшее вычисление данного условного
выражения прекращается. Это избавляет компьютер
от последствий деления на нуль. |