Поделиться через


Логические операторы 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. Результатом логической операции является 0 или 1. Тип результата — int.

Логические операторы C описаны ниже:

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

Операнды логических и логических выражений оцениваются слева направо. Если значение первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется. Этот эффект называется "короткой схемой" оценки. В выражении есть точка последовательности после первого операнда. Дополнительные сведения см. в разделе "Точки последовательности".

Примеры

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

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 выводится. Как только одно из условий оценивается как истинное, оценка прекращается.

См. также