выражение-отношения :
сдвиговое-выражение
выражение-отношения < сдвиговое-выражение
выражение-отношения > сдвиговое-выражение
выражение-отношения <= сдвиговое-выражение
выражение-отношения >= сдвиговое-выражение
Операторы: <(меньше), >(больше), <=(меньше или равно) и >=(больше или равно) - все выдают 0, если специфицируемое отношение ложно, и 1, если оно истинно. Тип результата - int . Над арифметическими операндами выполняются обычные арифметические преобразования. Можно сравнивать указатели на объекты одного и того же типа (без учета квалификаторов); результат будет зависеть от относительного расположения в памяти. Допускается, однако, сравнение указателей на разные части одного и того же объекта: если два указателя указывают на один и тот же простой объект, то они равны; если они указывают на элементы одной структуры, то указатель на элемент с более поздним объявлением в структуре больше; если указатели указывают на элементы одного и того же объединения, то они равны; если указатели указывают на элементы некоторого массива, то сравнение этих указателей эквивалентно сравнению их индексов. Если p указывает на последний элемент массива, то p+1 больше, чем p , хотя p+1 указывает за границы массива. В остальных случаях результат сравнения не определен.
Эти правила несколько ослабили ограничения, установленные в первой редакции языка. Они позволяют сравнивать указатели на различные элементы структуры и объединения и легализуют сравнение с указателем на место, которое расположено непосредственно за концом массива.
A7.10. Операторы равенства
выражение-равенства :
выражение-отношения
выражение-равенства == выражение-отношения
выражение-равенства != выражение-отношения
Операторы ==(равно) и !=(не равно) аналогичны операторам отношения с той лишь разницей, что имеют более низкий приоритет. (Таким образом, a < b == c < d есть 1 тогда и только тогда, когда отношения a < b и c < d или оба истинны, или оба ложны.)
Операторы равенства подчиняются тем же правилам, что и операторы отношения. Кроме того, они дают возможность сравнивать указатель с целочисленным константным выражением, значение которого равно нулю, и с указателем на void (см. A6.6.).
A7.11. Оператор побитового И
И-выражение :
выражение-равенства
И-выражение & выражение-равенства
Выполняются обычные арифметические преобразования: результат - побитовое ANDоперандов. Оператор применяется только к целочисленным операндам.
A7.12. Оператор побитового исключающего ИЛИ
исключающее-ИЛИ-выражение :
И-выражение
исключающее-ИЛИ-выражение ^ И-выражение
Выполняются обычные арифметические преобразования; результат - побитовое XORоперандов. Оператор применяется только к целочисленным операндам.
A7.13. Оператор побитового ИЛИ
ИЛИ выражение :
исключающее-ИЛИ-выражение
ИЛИ-выражение | исключающее-ИЛИ-выражение
Выполняются обычные арифметические преобразования; результат - побитовое ORоперандов. Оператор применяется только к целочисленным операндам.
A7.14. Оператор логического И
логическое-И-выражение :
ИЛИ-выражение
логическое-И-выражение && ИЛИ-выражение
Операторы &&выполняются слева направо. Оператор && выдает 1, если оба операнда не равны нулю, и 0 в противном случае. В отличие от &, && гарантирует, что вычисления будут проводиться слева направо: вычисляется первый операнд со всеми побочными эффектами; если он равен 0, то значение выражения есть 0. В противном случае вычисляется правый операнд, и, если он ранен 0, то значение выражения есть 0, в противном случае оно равно 1.
Операнды могут принадлежать к разным типам, но при этом каждый из них должен иметь либо арифметический тип, либо быть указателем. Тип результата - int .
A7.15. Оператор логического ИЛИ
логическое-ИЛИ-выражение :
логическое-И-выражение
логическое-ИЛИ-выражение || логическое-И-выражение
Читать дальше