Загрузка [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js
 

printОперации

printСравнение и логические операции

Для сравнения значений используются следующие операции:

Операция Описание
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.

Простые условия объединяются в сложные с помощью логических операций:

Операция Альтернативное обозначение Описание
!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.

В языке С (в С++ нет) есть специальная операция, которую можно назвать "выбором по типу" :
_Generic( x,тип1:выр1,тип2:выр2,... )
Результатом операции является одно из "выр"_i в зависимости от типа x; "выр"_n, помеченное default, выбирается, если тип x не совпадает ни с одним из "тип"_i. Обычно эта операция используется в макросах препроцессора, позволяя вызывать нужный вариант функции как в <tgmath.h>.

short a;
int r=_Generic(a/2.0, int:1, double:2, float:3, default:0); // r=2
loading