Для сравнения значений используются следующие операции:
||.draw||Операция | Описание
--|--
``x==y`` | x равно y
``x!=y`` | x не равно y
``x>y`` | x больше y
``x>=y`` | x больше или равно y
``x<y`` | x меньше y
``x<=y`` | x меньше или равно y
Результатом этих операций является булево значение 0 или 1.
При сравнении вещественных значений необходимо учитывать точность вычислений, вместо
``x==y`` лучше проверить ``fabs(x-y)<1e-9``, если абсолютная точность вычислений равна `10^{-9}`.
Простые условия объединяются в сложные с помощью логических операций:
||.draw||Операция | Альтернативное обозначение | Описание
--|--|--
``!x`` | ``not x`` | НЕ x
``x&&y`` | ``x and y`` |x И y
``x\|\|y`` | ``x or y`` | x ИЛИ y
Аргументы этих операций могут быть не булевыми, любое ненулевое значение интерпретируется как 1 (истина), нулевое -- как 0 (ложь). Если аргумент операции отрицания нетривиальный, то его необходимо записывать в скобках, так как операция имеет высокий приоритет. Вычисление аргументов операции И выполняется слева направо, если аргумент является ложным, то результатом операции является ложь, и второй аргумент не вычисляется. Аналогично для операции ИЛИ: если первый аргумент операции является истинным, то результатом операции является истина, и второй аргумент не вычисляется.
В заголовочном файле <iso646.h> определяются альтернативные обозначения для логических операций.
Условное выражение ``x?y:z`` интерпретируется так "если истинно выражение x, то результат равен y, иначе z". Например, для нахождения максимума из двух чисел a и b нужно написать ``a>b?a:b``.