Операции сравнения – это бинарные операции, т.е. у них два аргумента.
Знаки операций сравнения такие:
знак операции в языке Си | название | математическое обозначение |
---|---|---|
== | равно | = |
!= | не равно | ≠ |
< | меньше | < |
<= | меньше либо равно | ⩽ |
> | больше | > |
>= | больше либо равно | ⩾ |
- Achtung!!!
=> =< <> ><
- Achtung!!!
Правильно:
a == b
Тоже правильно, но хуже читается:
a==b
Неправильно (синтаксическая ошибка):
a = = b
- Achtung!!!
if (x=1) { y = -222; } else { y = 777; }
вместо:
if (x==1) { y = -222; } else { y = 777; }
То с точки зрения правил записи (и с точки зрения компилятора, хотя многие компиляторы на всякий случай выдадут тут предупреждение (warning)) ошибки не будет. Но в результате программа вместо сравнения x c 1 будет записывать значение 1 в переменную x и использовать записанное значение (т.е. 1) как результат проверки условия, которое, таким образом, будет всегда истинным.
Результатом операции сравнения является логическое значение в понимании языка Си, то есть 0 ("ложь") или 1 ("истина").
Если необходимо как-то учесть результат нескольких сравнений в одном условии, то пытаться это сделать, записав через запятую — неверно, например:
if (x > 1, y > 2) { . . . }
Самое обидное, что компилятор в этом случае не сообщит об ошибке, так как формально синтаксически такая запись имеет право на существование, так как в языке Си есть операция "запятая", которая означает последовательное вычисление выражений, при этом результатом операции считается значение последнего выражения (в целом эту операцию лучше не использовать, за исключением некоторых случаев). Таким образом, в приведённом примере учитываться будет только сравнение y > 2.
Чтобы использовать результат нескольких сравнений в одном условии, необходимо использовать какую-то из бинарных логических операций языка Си — см. Логические операции.
Если необходимо одновременное выполнение двух условий, нужно использовать операцию && (логическое "и"), например:
if (x > 1 && y > 2) { . . . }
Если достаточно выполнения хотя бы одного из условий, нужно использовать операцию || (логическое "или"), например:
if (x > 1 || y > 2) { . . . }
Последовательное использование нескольких операций сравнения, хотя и правильно синтаксически, даёт, как правило, не тот результат, который ожидается. Например, условие:
20 < x < 30
эквивалентно
(20 < x) < 30
То есть со значением 30 сравнивается значение 0 или 1, получившееся в результате сравнения 20 < x. Условие, соответствующее математической записи 20 < x < 30 на языке Си можно записать как:
20 < x && x < 30