Главная » Статьи » Программирование » С/С++

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

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

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

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

bool real у = true;

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

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

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

! - логическое отрицание; л - исключающее ИЛИ.

Семантика этих операций известна из курса математической логики.

Кроме того в C# определены две условные (conditional) ло­гические бинарные операции:

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

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

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

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

> больше;

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

< меньше;

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

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

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

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

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

х<Ь&а<х

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

(х<Ь)&(а<х)

Значением выражения будет true, если х принадлежит интервалу (а. Ь).

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

х>Ь~х<а; х>Ь\х<а; х>Ь 11 х<а.

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

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

х<Ь&&а<х

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

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

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

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

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

static void Main()

{

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

bool res;

res = x<y + z& y<x+z&z<x + y;

Console. WriteLine(res = * + res);

)

}

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

res = True

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

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

«х <= (у + z))&(y <= (х + z)))&(z <= (х + у))

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

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

res = x<y + z &&y<x+z&&z<x +у;

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

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

Категория: С/С++ | Добавил: Алексей (06.10.2014)
Просмотров: 2953 | Теги: программирование, С++, дизъюнкция, тип, True, Переменная, BOOL, False, C# | Рейтинг: 0.0/0
Всего комментариев: 0
avatar