Логические операторы в C

Логические операторы выполняют операции логического И ( && ) и логического ИЛИ ( || ).

Синтаксис

logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

Комментарии

Логические операторы не выполняют обычных арифметических преобразований. Вместо этого они оценивают каждый операнд с точки зрения его эквивалентности нулю. Результатом логической операции является либо 0, либо 1. Результат имеет тип int.

Логические операторы C описываются ниже.

Оператор Описание
&& Логический оператор И создает значение 1, если оба операнда имеют ненулевое значение. Если любой из операндов имеет значение 0, результат равен 0. Если первый операнд операции логического И имеет значение 0, то второй операнд не вычисляется.
|| Оператор логического ИЛИ выполняет над своими операндами операцию включающего ИЛИ. Если оба операнда имеют значение 0, результат будет равен 0. Если любой из операндов имеет ненулевое значение, результат будет равен 1. Если первый операнд операции логического ИЛИ имеет ненулевое значение, то второй операнд не вычисляется.

Операнды выражений логического И и логического ИЛИ вычисляются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется. Это называется сокращенным вычислением. После первого операнда в выражении есть точка последовательности. Дополнительные сведения см. в статье Точки следования C.

Примеры

В следующем примере показано использование логических операторов.

int w, x, y, z;

if ( x < y && y < z )
    printf( "x is less than z\n" );

В этом примере функция printf вызывается для печати сообщения, если x меньше y, а y меньше z. Если x больше y, то второй операнд (y < z) не вычисляется и сообщение не печатается. Это еще один пример сокращенных вычислений, который нужно учитывать во время написания логических сравнений. В противном случае может возникнуть ошибка, если код использует побочные эффекты вычисления второго операнда.

printf( "%d" , (x == w || x == y || x == z) );

В этом примере, если x равно w, y или z, то второй аргумент функции printf имеет значение true и код выводит значение 1. В противном случае он возвращает значение false и код выводит значение 0. Как только обнаруживается, что одно из значений равно true, вычисление прекращается.

См. также