Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

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

К предопределённым (ещё точнее – к базовым или простым) типам значений

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

значений. Константами-литералами булева типа являются true (истина) и false

(ложь)

.

Переменные типа bool не могут принимать значений, отличных от логических

литералов.

Им

нельзя

присваивать

значений

других

типов,

например,

целочисленных. Логическое значение

"логический тип"

(типа bool) нельзя

преобразовать ни в какое значение другого типа.

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

bool realy=true;

Из логических переменных и констант формируются логические (булевы)

выражения

"логические выражения:булевы выражения" . Для этого в языке С#

имеются логические операции "операции:логические операции" :

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

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

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

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

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

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

операции:

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

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

В выражении x&&y значение y не вычисляется, если х имеет значение false. В

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

Кроме данных типа bool в логических выражениях часто используются

отношения. Отношение

"отношение"

– это два операнда, соединённые (или

разделённые) знаком операции отношений:

> больше;

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

< меньше;

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

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

;

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

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

приоритет, нежели все остальные операции отношений.

Проверку принадлежности числового значения x интервалу (a, b), где a<=b,

можно выполнить с помощью такого логического выражения:

x<b&a<x

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

(x<b)&(a<x)

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

Проверку истинности высказывания “значение х находится вне интервала

(a,b)” позволяют выполнить логические выражения:

x>b^x<a;

x>b|x<a;

x>b||x<a.

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

"условная

дизъюнкция" . Остановимся подробнее на её особенностях.

Условные версии (|| и &&) бинарных логических операций (& и |) позволяют

избежать вычисления значения второго (правого) операнда логического выражения,

если значение левого операнда однозначно определяет значение всего выражения.

Проверку принадлежности х числовому интервалу (a,b) можно записать так:

х<b&&a<x

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

a<x.

Обратите внимание, что знаки бинарных логических операций те же, что и

знаки поразрядных операций конъюнкции (&) и дизъюнкции (|). То же самое

относится и к знаку ^, который для целочисленных операндов обозначает операцию

поразрядного исключающего ИЛИ. Как и в (уже упомянутом) случае применения

знака + для обозначения операции конкатенации строк, здесь имеет место

перегрузка операций. Это ещё один пример полиморфизма

.

Не лишним будет, в связи с перегрузкой операций, вспомнить, что символом в

информатике называют знак с его смыслом. Встретив в выражениях знак &,

компилятор анализирует контекст и, если обнаруживается, что справа и слева

операнды типа bool, то знак & воспринимается как символ логической операции

конъюнкции.

Следующая программа "проверяет" три вещественных переменных x, y, z –

могут ли быть их значения длинами сторон треугольника.

// 04_02.cs - отношения и логические выражения

using System;

class Program

{

static void Main()

{

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

bool res;

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

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

}

}

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

res = True

В программе логической переменной res присваивается значение логического

выражения в виде конъюнкции трёх отношений. Для заданных значений переменных

x, y, z результат true с помощью метода Console.WriteLine() выводится как True…

Обратите внимание на порядок вычисления использованного в программе

логического

выражения.

С

помощью

круглых

скобок

последовательность

выполнения операций можно указать явно таким образом:

((x<=(y+z))&(y<=(x+z)))&(z<=(x+y))

Необходимости в таком применении скобок нет – в языке С# определены

приоритеты (ранги) всех операций (см. Табл. 3.1). В соответствии с этими

приоритетами, первыми в нашем логическом выражении вычисляются значения

(типа double) операндов отношений (т.е. выполняется операция сложения +). Затем

последовательно слева-направо вычисляются значения (типа bool) отношений, и

к

этим логическим значениям применяется слева-направо операция & (конъюнкция).

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

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

"условная

конъюнкция" :

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

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

размещенные правее него, не вычисляются.

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

истинности одного условия позволяет избежать аварийных ситуаций при

вычислении второго условия.

Соседние файлы в папке CSBasicCourse2ndedPodbelsky