Смекни!
smekni.com

Основы алгоритмизации и программирования 2 (стр. 7 из 32)

6. Приведите математические операторы, использемые в языке C#.

7. Что такое старшинство операторов?

2. УПРАВЛЕНИЕ ПОРЯДКОМ ВЫПОЛНЕНИЯ ПРОГРАММЫ

У всех программ на С#, которые рассматривались до сих пор, имеется одна общая черта. Во всех случаях выполнение кода происходило последовательно сверху вниз, строка за строкой, без каких-либо пропусков. Однако если бы приложения всегда выполнялись таким образом, то возможности разработчиков были бы сильно ограничены.

Существуют два способа управления порядком выполнения программ, т. е. последовательностью выполняемых в программе на С# строк.

Ветвление – выполнение кода обусловлено результатами предшествующих вычислений, например: "выполнить этот код только в том случае, если значение переменной myVal меньше 10".

Использование циклов – повторяющееся выполнение одних и тех же операторов (определенное количество раз или до тех пор, пока не выполнится контрольное условие).

Оба способа предполагают использование булевой логики.

2.1.Булева логика

Тип bool, может принимать одно из двух значений: true (истина) или false (ложь). Этот тип очень часто применяется для записи результата выполнения какой-либо операции, с тем, чтобы мы могли выполнить какие-либо определяемые им действия. В частности, тип bool используется для хранения результатов сравнения.

В качестве примера рассмотрим ситуацию, когда выполнять код нужно только при значении переменной myVal меньше 10. Для этого необходимо владеть некоторым способом, позволяющим определять, является ли утверждение "myVal меньше 10" правдой или ложью, т. е. необходимо получить результат логического сравнения.

Логическое сравнение требует применения логических операторов сравнения (также известных под именем операторов отношения), которые приведены в таблице 2.1. В этой таблице переменная var1 во всех случаях имеет тип bool, а типы переменных var2 и var3 меняются.

Таблица 2.1 - Логические операторы сравнения

Оператор

Тип

Пример выражения

Результат

= =

Бинарный

varl = var2 = = var3;

Переменной varl присваивается значение true в том случае, если переменная var2 равна переменной var3, и значение false в противном случае.

! =

Бинарный

varl = var2 != var3;

Переменной varl присваивается значение true в том случае, если переменная var2 не равна переменной var3, и значение false в противном случае.

<

Бинарный

varl = var2 < var3;

Переменной varl присваивается значение true в том случае, если переменная var2 меньше переменной var3, и значение false в противном случае.

>

Бинарный

varl = var2 > var3;

Переменной varl присваивается значение true в том случае, если переменная var2 больше переменной var3, и значение false в противном случае.

<=

Бинарный

varl = var2 <= var3;

Переменной varl присваивается значение true в том случае, если переменная var2 меньше или равна переменной var3, и значение false в противном случае.

>=

Бинарный

varl = var2 >= var3;

Переменной varl присваивается значение true в том случае, если переменная var2 больше или равна переменной var3, и значение false в противном случае.

В программе можно использовать эти операторы для численных значений следующим образом:

bool isLessThan10;
isLessThan10 = myVal <10

;

В результате выполнения этого кода переменной isLessThan10 будет присвоено значение true в том случае, если значение переменной myVal меньше 10, а в противном случае – значение false.

Операторы сравнения могут использоваться также и для переменных других типов, например, для строк:

bool isKarli;
isKarli = myString = = “Karli”

В данном случае переменной isKarli будет присвоено значение true только при условии, что строка, содержащаяся в переменной myString, имеет вид "Karli"

Аналогичным образом можно поступать и с логическими переменными:

bool isTrue;
isTrue = myBool= = true

;

Однако в этом случае допускается использование только операторов = = и !=.

Распространенной ошибкой является безосновательное предположение, что если val1 < val2 есть ложь, то val1 > val2 – истина. Если val1 = = val2, оба предыдущих выражения будут ложными.

Существуют и некоторые другие операторы, специально предназначенные для работы с логическими значениями

(см. таб. 2.2).

Теперь можно записать последний пример следующим образом:

bool isTrue;
isTrue = myBool & true

;

Для операторов & и | существуют аналоги (табл. 2.3).

Таблица 2.2 – Операторы для работы с логическими значениями

Оператор

Тип

Пример выражения

Результат

!

Унарный

varl = ! var2;

Переменной varl присваивается значение true в том случае, если переменная var2 имеет значение false, и значение false, если значение var2–true (операция "логическое не" (NOT)).

&

Бинарный

varl = var2 & var3;

Переменной varl присваивается значение true в том случае, если обе переменные var2 и var3 имеют значение true, и значение false в противном случае (операция "логическое и" (AND)).

|

Бинарный

varl = var2 | var3;

Переменной varl присваивается значение true в том случае, если хотя бы одна из переменных – var2 или var3 (или обе) – имеет значение true, и значение false в противном случае (операция "логическое или" (OR)).

^

Бинарный

varl = var2 ^ var3;

Переменной varl присваивается значение true в том случае, если одна из переменных – var2 или var3, но не обе одновременно – имеет значение true, и значение false в противном случае (операция "исключающее или" (XOR)).

Таблица 2.3 - Аналоги логических операторов & и |

Оператор

Тип

Пример выражения

Результат

&&

Бинарный

varl = var2 && var3;

Переменной varl присваивается значение true в том случае, если обе переменные var2 и var3 имеют значение true, и значение false в противном случае (операция "логическое и" (AND)).

||

Бинарный

varl = var2 || var3;

Переменной varl присваивается значение true в том случае, если одна из переменных, var2 или var3 (или обе), имеет значение true, и значение false в противном случае (операция "логическое или" (OR)).

Результат выполнения этих операций в точности соответствует результату выполнения операций & и |, однако существует одно важное отличие; оно заключается в способе достижения результата, позволяющем в некоторых случаях ускорить операцию. Оба эти оператора рассматривают значение своего первого операнда (в приведенной выше таблице это var2) и в определенных случаях могут вообще обходиться без обработки второго операнда (в нашем примере var3).

Если значение первого операнда оператора && false, то нет необходимости рассматривать значение второго операнда, поскольку результатом все равно будет значение false. Аналогично оператор || вернет значение true, если его первый операнд имеет значение true, независимо от значения второго операнда. При выполнении операторов & и | всегда происходит вычисление обоих операндов.

С учетом этого при использовании операторов && и || вместо & и | можно ожидать небольшого увеличения быстродействия. Выгода будет особенно ощутима в тех приложениях, где задействовано много таких операторов. Существует эмпирическое правило, согласно которому при наличии возможности всегда следует использовать операторы && и ||.

2.2.Операторы работы с битами

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

Бит операндаБит операнда 1 1

Бит операндаБит операнда 2 2

Бит результатаБит результата выполнения операциивыполнения операции |

1

1

&1

11

01

11

01

10

10

00

01

00

0

0

0

ТаблицаТаблица2.4 2.5 - -БитовБитовая операцияая операция & | Рассмотрим работу этих операторов, начав с оператора &. Он действует следующим образом: каждый бит первого операнда сравнивается с находящимся в такой же позиции битом второго операнда, а бит, записывающийся в аналогичной позиции результата, определяется следующим образом (см. табл. 2.4).