Читать «Полный справочник по С++» онлайн - страница 30

Герберт Шилдт

Операторы, имеющие одинаковый приоритет, выполняются слева направо. Разумеется, для изменения порядка вычисления операторов можно применять скобки. В языке C/C++ скобки интерпретируются точно так же, как и во всех других языках программирования. Они позволяют присвоить некоторым операторам или группе операторов более высокий приоритет.

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

В термине оператор сравнения слово “сравнение” относится к значениям операндов. В термиие логический оператор слово “логический” относится к способу, которым устанавливаются эти отношения. Поскольку операторы сравнения и логические операторы тесно связаны друг с другом, мы рассмотрим их вместе.

В основе и операторов сравнения, и логических операторов лежат понятия “истина” и “ложь”. В языке С истинным считается любое значение, не равное нулю. Ложное значение всегда равно 0. Выражения, использующие операторы сравнения и логические операторы, возвращают 0, если результат ложен, и 1, если результат истинен.

В языке C++ истинные и ложные значения различаются точно так же, но. помимо этого, предусмотрен особый тип данных bool и булевы константы true и false. В программах на языке C++ значение 0 автоматически преобразовывается в константу false, а ненулевое значение — в константу time. Справедливо и обратное утверждение: константа true преобразовывается в значение 1, а константа false — в число 0. Результатом выражений, в которых используются операторы сравнения и Логические операторы, являются константы true и false. Однако, поскольку эти

константы автоматически преобразовываются в числа 1 или 0, различие между языками С и C++ в этом аспекте становится чисто академическим.

Операторы сравнения и логические операторы приведены в табл. 2.5.

Таблица 2.5. Операторы сравнения и логические операторы
Операторы сравнения
ОператорДействие
>Больше
>=Больше или равно
<Меньше
< =Меньше или равно
1 =Не равно
Логические операторы
ОператорДействие
&&И
IIИЛИ
НЕ
Рассмотрим таблицу истинности для логических операторов, используя значения 1 и 0.
Рqp&&qр| |qip
0000i
010ii
111i0
100i0

Операторы сравнения и логические операторы имеют более низкий приоритет, чем арифметические операторы. Таким образом, выражение 10 > 1 + 12 будет вычислено так, будто оно записано следующим образом: 10 > (1 + 12). Разумеется, в обоих случаях это выражение будет ложным.

В одном и том же выражении можно использовать несколько операторов.

| 10>5 && !(10<9) || 3<=4

В данном случае результатом будет истинное значение.

Несмотря на то что ни в языке С, ни в языке C++ нет оператора “исключительное ИЛИ” (XOR), его можно легко реализовать в виде функции, используя другие логические операторы. Результатом оператора XOR является истинное значение, только если один из операндов (но не оба) истинен. Программа, приведенная ниже, содержит функцию хог (), применяющую операцию исключающего ИЛИ к двум своим аргументам.

#include <stdio.h> int хог(int a, int b); int main(void)

{

printf("%d", xor(l, 0)); printf("%d", xor(l, 1)); printf("%d", xor(0, 1) ) ; printf("%d", xor(0, 0));