Принятие решений и логические величины. Операторы отношения и сравнения на равенство
При разработке программ часто возникает необходимость в принятии решений. В строго типизированных языках для этих целей используются логические (булевские) типы данных. В классическом языке Си логический тип отсутствовал. Для принятия решений использовались некоторые соглашения относительно замены логических значений числами. В связи с тем, что эти соглашения должны обеспечивать взаимные переходы между числами и логическими значениями необходимо учитывать следующее:
● Принцип интерпретации числовых значений в качестве логических значений
● Интерпретация логических значений в качестве чисел.
В языке Си эти соглашения выглядят следующим образом:
● Любое число (целое или вещественное), отличное от нуля, может интерпретироваться в соответствующем контексте как логическое значение true, а число, равное нулю – как логическое значение false.
● Логическое значение true в контексте, требующем числовой интерпретации, воспринимается как целое число равное 1, логическое значение false – воспринимается как целое число равное 0.
При этом оказывается, что в качестве “источников” логических значений можно использовать следующие программные конструкции:
● Обычные арифметические выражения (нулевое значение такого выражения соответствует логическому значению false, а любое не нулевое значение - true).
● Отношения и сравнения на равенство.
● Выражения, использующие логические операторы, в качестве операндов которых служат арифметические выражения, отношения и сравнения на равенство.
Ближайшей нашей задачей является рассмотрение отношений и сравнений на равенство.
Как уже отмечалось ранее, отношения и сравнения на равенство используются для получения логических значений. Это обеспечивается путем оценки истинности отношений и сравнений на равенство. Причем в том случае, когда истинность имеет место, указанное выражение возвращает значение 1, в противном случае возвращается значение 0.
В таблице приводятся названия рассматриваемых операций, математические знаки операций, операторы языка Си и примеры их применения
Название операции | Математический знак | Оператор Си | Пример |
меньше | < | < | a < b |
не меньше | ³ | >= | a >= b |
больше | > | > | a > b |
не больше | £ | <= | a <= b |
равно | = | == | a == b |
не равно | ¹ | != | a != b |
Первые четыре оператора, приведенные в таблице, имеют одинаковый приоритет, а операторы сравнения на равенство имеют приоритет на один уровень ниже. Рассматриваемые операторы имеют более низкий приоритет по сравнению с арифметическими операторами. Пусть имеется следующий фрагмент программного кода:
/* . . . . . . . . . . . . . . . . . . . . . . . . . . . */
int n = 3;
printf(“n > 2 = %d n < -1 = %d\n”, n > 2, n < -1);
/* . . . . . . . . . . . . . . . . . . . . . . . . . . . */
В этом фрагменте кода оцениваются значения отношений n > 2 и n < -1 для случая, когда значение переменной n равно 3. Нетрудно видеть, что первое отношение должно принимать значение true (истина), а второе отношение – значение false (ложь). Обратимся теперь к выводу, полученному в результате выполнения данного фрагмента, который имеет следующий вид:
n > 2 = 1 n < -1 = 0
С учетом принятых в языке Си относительно кодирования булевских значений соглашений в качестве значения отношения n > 2 выведено число 1, в качестве значения второго отношения – число 0.