Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C_Lect3.doc
Скачиваний:
5
Добавлен:
08.09.2019
Размер:
67.07 Кб
Скачать

1.2. Операции отношений

Операции отношений позволяют сравнивать между собой значения любого простого типа:

< — меньше,

<= — меньше или равно,

> — больше,

>= — больше или равно,

== — равно,

!= — не равно.

По смыслу результатом операции отношения является логическое значение (ложь или истина): если указанное отношение действительно имеет место, то операция дает значение истина, в противном случае результатом будет ложь. Однако в языке C нет специального типа для логических значений. Вместо этого используется тип int. Действует следующее правило: целочисленное значение «ноль» эквивалентно логическому значению «ложь», а любое ненулевое значение эквивалентно значению «истина». Если целая величина стоит в таком месте, где по смыслу подразумевается логическое значение, она будет интерпретирована в соответствии с этим правилом.

Для результатов операций отношений правило следует уточнить: там, где отношение выполнено (т.е. должно быть логическое значение «истина»), всегда получается целочисленное значение 1, а не произвольное ненулевое число.

Приоритет операций отношений ниже, чем у арифметических операций (т.е. в смешанных выражениях всегда вначале выполняется арифметика, а затем производится сравнение результатов). Однако разные отношения различаются по приоритету: более высокий уровень старшинства у операций <, <=, >, >= и более низкий у == и !=.

1.3. Логические операции

В языке C имеются три логические операции — две бинарные:

&& — операция И (логическое умножение, или конъюнкция),

|| — операция ИЛИ (логическое сложение, или дизъюнкция),

и одна унарная:

! — операция НЕ (отрицание).

Логические операции выполняются над логическими значениями (т.е. над целыми, интерпретируемыми согласно приведенному выше правилу); результатом является тоже логическое значение (т.е. целое 0 или 1).

Приоритет бинарных логических операций (И, ИЛИ) ниже, чем у операций отношений, т.е. логические операции в смешанных выражениях выполняются в последнюю очередь. При этом операция И (логическое умножение) обладает более высоким приоритетом по сравнению с операцией ИЛИ (логическим сложением).

Унарная логическая операция НЕ (отрицание) имеет высокий приоритет — такой же, как другие унарные операции (в том числе арифметические).

Определение логических операций:

Операция И дает результат истина в единственном случае — если оба операнда имеют значение истина. В остальных трех случаях (т.е. истина И ложь, ложь И истина, ложь И ложь) получается результат ложь.

Операция ИЛИ, наоборот, дает ложь в единственном случае — если оба операнда имеют значение ложь. В остальных трех случаях (т.е. если истинным оказывается один ИЛИ другой операнд, или же оба вместе) получается истина.

Унарная операция отрицания просто меняет логическое значение на противоположное: превращает ложь в истину, а истину в ложь.

В отличие от арифметических выражений, порядок вычисления логических выражений строго определен: операнды вычисляются в порядке записи (слева направо), причем гарантируется, что вычисление прекратится тотчас же, как только станет ясен конечный результат. Пусть, например, проверяется условие: a < 0 || k == 1 (a меньше нуля ИЛИ k равно единице), причем переменная a содержит значение –10. Первым будет проверено левое отношение (a < 0), и поскольку оно имеет значение истина, то ясно, что все условие в целом тоже имеет значение истина (см. определение операции ИЛИ). Поэтому отношение k == 1 проверяться не будет — оно при любом исходе не повлияет на конечный результат. Если же переменная a содержит, скажем, значение 0, т.е. первое отношение оказывается ложным, то конечный результат зависит от истинности второго (правого) отношения. В этом (и только в этом) случае будет проверено равенство k == 1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]