Г. Шилдт - С#4.0 Полное руководство (1160795), страница 19
Текст из файла (страница 19)
// Продемонстрировать применение оператора $. пзгпд Бузгев; с1азз Мос)оево ) зсасгс тото Ма1п ) ) ) 1пс ггезо1Г, ггев; г)опЬ1е бгезо1г, с)гев; 1гезо1г = 10 / 3; ггев = 10 $ 3: с)гезп11 = 10.0 / 3.0; Сгев = 10.0 $ 3.0; Сопзо1е.иг1сеьгпе("Результат и остаток от деления 10 / 3: ).гезо1г е " " + ).гев); Сопзо1е.вггсевгпе)"Результат и остаток от деления 10.0 / 3.0: огезп1г + " " + с)гев); Результат выполнения этой программы приведен ниже. Результат и остаток от деления 10 / 3: 3 1 Результат и остаток от деления 10.0 / 3.0: 3.33333333333333 1 Как видите, обе операции, $ целочисленного типа и с плавающей точкой, дают один и тот же остаток, равный 1. Операторы инкремента и Аекремента Операторы инкремента (++) и декремента ( — — ) были представлены в главе 2. Как станет ясно в дальнейшем, они обладают рядом особых и довольно интересных свойств.
Но сначала выясним основное назначение этих операторов. Оператор инкремента увеличивает свой операнд на 1, а оператор декремента уменьшает операнд на 1. Следовательно, оператор Глава 4. Операторы 99 равнозначен оператору х = х ь 1р а оператор равносилен оператору х=х — 1; Следует, однако, иметь в виду, что в инкрементной или декрементной форме значение переменной х вычисляется только один, а не два раза. В некоторых случаях это позволяет повысить эффективность выполнения программы. Оба оператора инкремента и декремента можно указывать до операнда (в префиксной форме) или же после операнда (в постфиксной форме).
Например, оператор х = х + 11 может быть записан в следующем виде: ++х; // префиксная форма или же в таком виде: к++1 // постфиксная форма В приведенном выше примере форма инкремента (префиксная или постфиксная) особого значения не имеет. Но если оператор инкремента или декремента используется в длинном выражении, то отличие в форме его записи уже имеет значение.
Когда оператор инкремента или декремента иред1иестеует своему операнду, то результатом операции становится значение операнда после инкремента или декремента. А когда оператор инкремента или декремента следует после своего операнда, то результатом операции становится значение операнда до инкремента или декремента.
Рассмотрим следующий фрагмент кода. х = 10; У = ++х1 В данном случае значение переменной у будет установлено равным 11, поскольку значение переменной х сначала увеличивается на 1, а затем присваивается переменной у. Но во фрагменте кода х = 101 у = х++; значение переменной у будет установлено равным 10, так как в этом случае значение переменной х сначала присваивается переменной у, а затем увеличивается на 1. В обоих случаях значение переменной х оказывается равным 11.
Отличие состоит лишь том, когда именно это значение станет равным 11: до или после его присваивания переменной у. Возможность управлять моментом инкремента или декремента дает немало преимуществ при программировании. Обратимся к следующему примеру программы, в которой формируется последовательный ряд чисел. // Продемонстрировать отличие между префиксной и постфиксной формами оператора инкремента (++1. 100 Часть (. Язык С(т овспд Бувсесо с1авв РсеРовСРещо ( впастс чесс( Маьп() ( ьпс' х, уг 1пс 1) х = 1( у = Ог Сопво1е.нстоеььпе("Ряд чисел, полученных "с помощью оператора у = у + х++;"); тос(т = О) 1 < 10; 1+ ) ( у = у + х++( О постфиксиая форма оператора ++ Сопво1е.ис1Сепспе(у + " "): ) Сопво1е.нс1Сеььпе()) х = 1) у=о( Сопво1е.исьтестпе("Ряд чисел, полученных "с помощью оператора у = у + ++х(")( Еос(1 = 0; 1 < 10) 1++) ( у = у + ++х( !/ префиксиая форма оператора ++ Сопво1е.исттертпе(у + " ")( ) Сопво1е.исьтеоьпе()( Выполнение атой программы дает следующий результат.
Ряд чисел, полученных с помощью оператора у = у + х++ 1 3 б 10 15 14 21 2В Зб 45 55 Ряд чисел, полученных с помощью оператора у = у + ++х; 2 5 9 14 го Глава 4. Операторы 101 27 55 54 б5 Как подтверждает приведенный выше результат, в операторе у = у + х++г первоначальное значение переменной х складывается с самим собой, а полученный результат присваивается переменной у. После этого значение переменной х увеличивается на 1. Но в операторе у = у + ++х; значение переменной х сначала увеличивается на 1, затем складывается с первоначальным значением этой же переменной, а полученный результат присваивается переменной у.
Как следует из приведенного выше результата, простая замена префиксной формы записи оператора ++х посгфиксной формой х++ приводит к существенному изменению последовательного ряда получаемых чисел. И еще одно замечание по поводу приведенного выше примера; не пугайтесь выражений, подобных следующему: у + ++х Такое расположение рядом двух операторов может показаться не совсем привычным, но компилятор воспримет их в правильной последовательности.
Нужно лишь запомнить, что в данном выражении значение переменной у складывается с увеличенным на 1 значением переменной х. Операторы отношения и логические операторы В обозначениях операшор отношения и логический опера мор термин отношения означает взаимосвязь, которая может существовать между двумя значениями, а термин логических — взаимосвязь между логическими значениями "истина" и "ложь". И поскольку операторы отношения дают истинные или ложные результаты, то они нередко применяются вместе с логическими операторами. Именно по этой причине они и рассмат риваются совместно в данном разделе.
Ниже перечислены операторы отношения. Значение Оператор Равно Не равно Больше Меньше Больше или равно Меньше или равно К числу логических относятся операторы, приведенные ниже. 102 Часть!. Язык О№ Оператор Значение И ИЛИ Исключающее ИЛИ Укороченное И Укороченное ИЛИ НЕ р Ч рсч р(ч р "ч га1яе Сгсе 1а1яе Сгие га1яе 1а1яе сгсе сгсе га1яе га1яе га1яе сгпе га1яе Сгпе Сгпе сгпе га1яе сгпе Сгпе 1а1яе Сгсе га1яе сгсе 1а1яе Как следует из приведенной выше таблицы, результатом выполнения логической операции исключающее ИЛИ будет истинное значение (стае), если один и только один ее операнд имеет значение С г се. Ниже приведен пример программы, демонстрирующий применение нескольких операторов отношения и логических операторов.
// Лрояемонстрировать применение операторов // отношения и логических операторов. оягпд Яуягеш) с1аяя ае1Ьоооря ( ягатьс гога Ма1п() ( Ьпс 1 )) Ьоо1 Ь1, Ь2) ь = 10) = 11) 11(1 < )) Сопяо1е.нгггеъьпе("1 < ЬГ(1 <= )) Сопяо1е.нгьсеЬЬпе("1 <= )")) ЬГ(1 != )) Сопяо1е.нгьгеЬзпе("1 != )")) Результатом выполнения оператора отношения или логического оператора является логическое значение типа Ьоо1. В целом, объекты можно сравнивать на равенство или неравенство, используя операторы отношения == и (кь А операторы сравнения <, >, <= или >= могут применяться только к тем типам данных, которые поддерживают отношение порядка. Следовательно, операторы отношения можно применять ко всем числовым типам данных.
Но значения типа Ьоо1 могут сравниваться только на равенство или неравенство, поскольку истинные (С гое) и ложные (Га 1 яе) значения не упорядочиваются. Например, сравнение Стае > га1ее в С(( не имеет смысла. Операнды логических операторов должны относиться к типу Ьоо1, а результат выполнения логической операции также относится к типу Ьоо1. Логические операторы с, (, " и ! поддерживают основные логические операции И, ИЛИ, исключающее ИЛИ и НЕ в соответствии с приведенной ниже таблицей истинности. Глава 4. Операторы 103 1Е(1 == №) Сопяо1е.иггтеььпе("Нельзя выполнить"); тс(1 >= 2) Сопво1е.итгте11пе("Нельзя выполнить"); 11(1 > №) сопво1е.итгтеььпе("Нельзя выполнить"); Ы = ттьег Ь2 = Еа1яе; 1Г(Ы а Ь2) Сопво1е.иггге11пе("Нельзя выполнить"); 11(!(Ы а Ь2)) Сопво1е.Хтгтевьпе("!(Ы ь Ь2) — ттце"); 11(ь1 ( ь2) сопяо1е.хттгеььпе("ь1 ) ь2 — ггце"); 1Г(Ы " Ь2) Сопзо1е.игттеЬтпе("Ы " Ь2 — Гтце")) ) Выполнение этой программы дает следующий результат.
т с т с= д ! (Ь1 Ь Ь2) — ттце Ы ( Ь2 — тгце Ы " Ь2 — ттце Результат импликации р и с( сгце сгце га1яе 1а1яе сгце га1яе га1яе сгце сгце 1а1яе сгце сгце Операция импликации может быть построена на основе комбинации логических операторов ! и ), как в приведенной ниже строке кода. 'р)с В следующем примере программы демонстрируется подобная реализация операции импликации. // Построение операции импликации в С№.
пя1пч Яувгевы с1аяя 1зр11сатгоп ( вгагтс зо1с( Матп() ( Ьоо1 р=та1ве, С№№а1ве; Логические операторы в С№ выполняют наиболее распространенные логические операции. Тем не менее существует ряд операций, выполняемых по правилам формальной логики. Эти логические операции могут быть построены с помощью логических операторов, поддерживаемых в С№. Следовательно, в С№ предусмотрен такой набор логических операторов, которого достаточно для построения практически любой логической операции, в том числе импликации. Имллика((ия — это двоичная операция, результатом которой является ложное значение только в том случае, если левый ее операнд имеет истинное значение, а правый — ложное.
(Операция импликации отражает следующий принцип: истина не может подразумевать ложь.) Ниже приведена таблица истинности для операции импликации. 104 Часть ). язык СФ 1пс Гог(1 = О; 1 < Гог(О = О; ) РГ (1==0) р 1Г (1==1) р г И==О> ч тг(1==1) ч 2) 1т+) ( < 2; = сгце; = Га1яе; = сгце; — Га1яе; сеь1пе("р равно " + р + ", Ч равно " + Ч); Сопво1е.игт ((Г(!р ( ч) Сопяо1е. Игтсеььпе("Результат импликации " + р + " и " + Ч т " равен " + сгое); Сегдпе (); Сопяо1е.мгг ) Результат выполнения этой программы выглядит так. р равно Тгое, Ч равно Тгое Результат импликации Тгце и Тгце равен Тгне р равно тгце, Ч равно Га1ве р равно Га1яе, ч равно Га1яе Результат импликации Га1яе и Тгце равен Тгце р равно Га1яе, Ч равно Га1яе Результат импликации Га1яе и Га1яе равен Ттце Укороченные логические операторы В СФ предусмотрены также специальные, укороченные, варианты логических операторов И и ИЛИ, предназначенные для получения более эффективного кода.
Поясним это на следующих примерах логических операций. Если первый операнд логической операции И имеет ложное значение (га1зе), то ее результат будет иметь ложное значение независимо от значения второго операнда. Если же первый операнд логической операции ИЛИ имеет истинное значение (г гце), то ее результат будет иметь истинное значение независимо от значения второго операнда. Благодаря тому что значение второго операнда в этих операциях вычислять не нужно, экономится время и повышается эффект ивносгь кода. Укороченная логическая операция И выполняется с помощью оператора аз, а укороченная логическая операция ИЛИ вЂ” с помощью оператора ) (.