Логический тип и логические выражения

К предопределенным (еще точнее — к базовым или простым) типам значений относится тип bool, используемый для представления логических (булевых) значений. Константами-литералами булева типа являются true (истина) и false (ложь).

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

Объявление с инициализацией логической переменной:

bool realy = true;

Из логических переменных и констант формируются логические (булевы) выражения. Для этого в языке C# имеются логические операции:

& — конъюнкция (логическое И);

| — дизъюнкция (логическое ИЛИ);

! — логическое отрицание;

л — исключающее ИЛИ.

Семантика этих операций известна из курса математической логики. Кроме того в C# определены две условные (conditional) логические бинарные операции:

&& — условная конъюнкция (условное И);

| | — условная дизъюнкция (условное ИЛИ).

В выражении х&&у значение у не вычисляется, если х имеет значение false. В выражении х | | у значение у не вычисляется, если х равно true.

Кроме данных типа bool в логических выражениях часто используются отношения. Отношение — это два операнда, соединенные (или разделенные) знаком операции отношений:

> — больше;

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

< — меньше;

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

= = — сравнение на равенство (равно);

!= — сравнение на неравенство (не равно);

Отметим, что операции сравнения на равенство (== и ! = ) имеют более низкий приоритет, нежели все остальные операции отношений.

Проверку принадлежности числового значения х интервалу (а, Ь), где а < Ь, можно выполнить с помощью такого логического выражения:

х < b & а < х

Последовательность вычислений можно показать с помощью скобок: (х < Ь)&(а < х)

Значением выражения будет true, если х принадлежит интервалу (а, Ь). Проверку истинности высказывания «значение х находится вне интервала (а, Ь)» позволяют выполнить логические выражения:

х > b А х < а; х > b | х < а; х > b || х < а.

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

Условные версии (| | и &&) бинарных логических операций (& и |) позволяют избежать вычисления значения второго (правого) операнда логического выражения, если значение левого операнда однозначно определяет значение всего выражения. Проверку принадлежности х числовому интервалу (а, Ь) можно записать так:

х < b && а < х

Если х < b равно false, то нет необходимости вычислять значение отношения а < х.

Обратите внимание, что знаки бинарных логических операций те же, что и знаки поразрядных операций конъюнкции (&) и дизъюнкции (|). То же самое относится и к знаку ^, который для целочисленных операндов обозначает операцию поразрядного исключающего ИЛИ. Как и в (уже упомянутом) случае применения знака + для обозначения операции конкатенации строк, здесь имеет место перегрузка операций. Это еще один пример полиморфизма.

Не лишним будет, в связи с перегрузкой операций, вспомнить, что символом в информатике называют знак с его смыслом. Встретив в выражениях знак &, компилятор анализирует контекст, и если обнаруживается, что справа и слева операнды типа bool, то знак & воспринимается как символ логической операции конъюнкции.

Следующая программа «проверяет» три вещественных переменных х, у, z — могут ли быть их значения длинами сторон треугольника.

// 04_02.cs - отношения и логические выражения using System; class Program {

static void MainQ

{

double x = 19, у = 31, z = 23.8;

bool res;

res = x

Console.WriteLine(”res = " + res);

} }

Результат выполнения программы: res = True

В программе логической переменной res присваивается значение логического выражения в виде конъюнкции трех отношений. Для заданных значений переменных х, у, z значение результата true с помощью метода Console.WriteLine() выводится как True.

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

Необходимости в таком применении скобок нет — в языке C# определены приоритеты (ранги) всех операций (см. табл. 3.1). В соответствии с этими приоритетами, первыми в нашем логическом выражении вычисляются значения (типа double) операндов отношений (т. е. выполняется операция сложения +). Затем последовательно слева направо вычисляются значения (типа bool) отношений, и к этим логическим значениям применяется слева направо операция & (конъюнкция).

Результат выполнения программы не изменится, если при вычислении логического выражения использовать условную конъюнкцию:

res = x

Однако при получении значения false в любом из отношений, отношения, размещенные правее него, не вычисляются.

Применение условных логических операций особенно удобно в тех случаях, когда проверка истинности одного условия позволяет избежать аварийных ситуаций при вычислении второго условия.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >