Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 20
Текст из файла (страница 20)
"2 Дробная часть числа: сопао1е.их1сеь1пе("целая часть числа: (О)", (1пс) магь.зсхь(п))7 92 Часть ). Язык Са Квадратный корень ия 9 равен 3 Целая часть числа: 3 дробная часть числа: 0 Квадратный корень из 10 равен 3.16227766016838 Целая часть числа: 3 Дробная часть числа: 0.16227766016838 Как видите, приведение результата, возвращаемого методом мас)7. 5с)гС (), к типу 100 позволяет получить целую часть числа. Так, в выражении месь.зчгс(я) — (апг) мать.зчгс(п) приведение к типу тпс дает целую часть числа, которая затем вычитается из всего числа, а в итоге получается дробная его часть.
Следовательно, результат вычисления данного выражения имеет тип боп)71е. Но к типу тпг приводится только значение, возвращаемое вторым методом Маеп. 5с)гС () . ГЛАВА Операторы в языке С№ предусмотрен обширный ряд операторов, предоставляющих программирующему возможность полного контроля над построением и вычислением выражений. Большинство операторов в С№ относятся к следующим категориям: арифметичеаше, поразряггные, логические и операторы отношения. Все перечисленные категории операторов рассматриваются в этой главе. Кроме того, в С№ предусмотрен ряд других операторов для особых случаев, включая индексирование массивов, доступ к членам класса и обработку лямбда-выражений. Эти специальные операторы рассматриваются далее в книге вместе с теми средствами, в которых они применяются.
Арифметические операторы Арифметические операторы, представленные в языке С№, приведены ниже. Действие Оператор Сложение Вычитание, унарный минус Умножение Деление Деление по модулю Декремент Инкремент Операторы ~, —, * и! действуют так, как предполагает их обозначение.
Их можно применять к любому встроенному числовому типу данных. Действие арифметических операторов не требует особых пояснений, за исключением следующих особых случаев. Прежде всего, не следует забывать, что когда оператор г' применяется к целому числу, то любой остаток от деления отбрасывается; например, результат целочисленного деления 10/3 будет равен 3. Остаток от этого деления можно получить с помощью оператора деления по модулю (е), который ина- 94 Часть (.
Язык С№ че иазывается оператором вычисления оппатккп Он дает остаток от целочисленного деления. Например, 10 $3 равно 1. В С№ оператор е можно применять как к целочисленным типам данных, так и к типам с плавающей точкой. Поэтому 10. 0 $3. 0 также равно 1. В этом отношении С№ отличается от языков С и С++, где операции деления по модулю разрешаются только для целочисленных типов данных. В приведенном ниже примере программы демонстрируется применение оператора деления по модулю.
// Продемонстрировать применение оператора Ъ. пвгпд зувгеао с1авв МоЖезо ( всасгс тогп Мавп() ( 1пг ьгевп1г, ьгезт т)оиЬ1е т)гевп1Г, Стево 1гевп1ь = 10 / зт ахеи = 10 $3т т(гевп1Г = 10.0 / 3.0' т(гез 10.0 $3.0) Сопво1е.пгвгепвпе("Результат и остаток от деления 10 / Зт " + ьгеви1г + " " + вгеи) ) Сопво1е.нг1сепхпе("Результат и остаток от деления 10.0 / 3.0: " + т(гевп1г + " " + с)геи)т Результат выполнения этой программы приведен ниже. Результат и остаток от деления 10 / зт 3 1 Результат и остаток от деления 10.0 / 3.0т 3.33333333333333 1 Как видите, обе операции, з целочисленного типа и с плавающей точкой, дают один и тот же остаток, равный 1.
Операторы инкремента и декремента Операторы иикремеита (++) и декремента ( — ) были представлены в главе 2. Как станет ясно в дальнейшем, оии обладают рядом особых и интересных свойств. Но сначала вЫясним основное назначение этих операторов. Оператор иикремеита увеличивает свой операнд иа 1, а оператор декремеита уменьшает операнд иа 1. Следовательно, оператор равнозначен оператору х=х+ 1т а оператор Глава я, Операторы 95 равносилен оператору х х-1; Следует, однако, иметь в виду, что в инкрементной или декрементной форме значение переменной х вычисляется только один, а не два раза. В некоторых случаях это позволяет повысить эффективность выполнения программы.
Оба оператора инкремента и декремента можно указывать до операнда (в префиксной форме) или же после операнда (в постфиксной форме). Например, оператор х х+1: может быть записан в следующем виде: ++х; // префиксная форма или же в таком виде: х++; // постфиксная форма В приведенном выше примере форма инкремента (префиксная или постфиксная) особого значения не имеет. Но если оператор инкремента или декремента используется в длинном выражении, то отличие в форме его записи уже имеет значение. Когда оператор инкремента или декремента предшествует своему операнду, то результатом операции становится значение операнда после инкремента или декремента.
А когда оператор инкремента или декремента еле(П/ят посля своего операнда, то результатом операции становится значение операнда до инкремента или декремента. Рассмотрим следующий фрагмент кода; х = 10; у = ++х; В данном случае значение переменной у будет установлено равным 11, поскольку значение переменной х сначала увеличивается на 1, а затем присваивается переменной у. Но во фрагменте кода х=10р у= хН.; значение переменной у будет установлено равным 10, так как в этом случае значение переменной х сначала присваивается переменной у, а затем увеличивается на 1. В обоих случаях значение переменной х оказывается равным 11.
Отличие состоит лишь том, когда именно это значение станет равным 11: до или после его присваивания переменной у. Возможность управлять моментом инкремента или декремента дает немало преимуществ при программировании. Обратимся к следующему примеру программы, в которой формируется последовательный ряд чисел: // Продемонстрировать отличие между префиксной // и постфиксной формами оператора инкремента (ьь) пягпЧ зуяяеяп с1аяя РгеРояяпеио ( ясасвс чоьо ма1п() ( впс х, у; впс 1; 96 Часть ). Язык С» х=1; Сопя о1е.
Игу ге ььпе (" Рял чисел, полученных " т "с помощью оператора у = х + х++7") Рог(1 = Ог 1 < 10; 1+4) у = х + х+47 // постфихсная форма оператора ы. Сопао1е.игзсеьзпе(у т " ")' Сопао1е.нгггеЬ1пе() к х = 1) Сопао1е.иггге11пе("Рял чисел, полученных " + "с помощью оператора у = х + ь+х)") Рог(1 = О) 1 < 107 1+т) ( у = х т +тх) // префихсная форма оператора ++ Сопао1е.нгзгеьзпе(у + " ")7 ) Сопао1е.игзгепгпе()7 ! ) Выполнение этой программы дает следующий результат: Рял чисел, полученных с помощью оператора у = х + хтт 2468 10 12 14 16 18 20 Рял чисел, полученных с помощью оператора у = х + ььхк 3579 11 13 15 17 19 21 Как подтверждает приведенный выше результат, в операторе у = х т хь+к первоначальное значение переменной х складывается с самим собой, а полученный результат присваивается переменной у. После этого значение переменной х увеличивается на к.
Но в операторе у х + ььхк значение переменной х сначала увеличивается на 1, затем складывается с первоначальным значением этой же переменной, а полученный результат присваивается переменной у. Как следует из приведенного выше результата, простая замена префиксной формы за- Глава 4. Операторы 97 писи оператора ++х постфиксной формой хе+ приводит к изменению последовательного ряда четных чисел на нечетные. И еще одно замечание по поводу приведенного выше примера: не пугайтесь выражений, подобных следующему: х ч чях Такое взаимное расположение двух операторов, воздействующих на одну и ту же переменную, может показаться не совсем привычным, но компилятор воспримет их в правильной последовательности. Нужно лишь запомнить, что в данном выражении значение переменной х складывается с ее увеличенным на 1 значением.
Операторы отношения и логические операторы В обозначениях оператор отношения и логический оператор термин отношения означает взаимосвязь, которая может существовать между двумя значениями, а термин логический — взаимосвязь между логическими значениями "истина" и "ложь". А поскольку операторы отношсния дают истинные или ложные результаты, то они нередко применяются вместе с логическими операторами.
Именно по этой причине они и рассматриваются совместно в данном разделе. Ниже перечислены операторы отношения. Значение Оператор Равно Не равно Больше Меньше Больше нлн равно меньше йли равно К числу логических относятся операторы, приведенные ниже. Значение Оператор ИЛИ Исключающее ИЛИ Укороченное И Укороченное ИЛИ НЕ Результатом выполнения оператора отношения или логического оператора является логическое значение типа Ьоо1.
В целом объекты можно сравнивать на равенство или неравенство, используя операторы отношения == н ! =. А операторы сравнения <, >, <= или >= могут применяться только к тем типам данных, которые поддерживают отношение порядка. Следовательно, 98 Часть ). Наык С» операторы отношения можно применять ко всем числовым типам данных. Но значения типа Ьоо1 могут сравниваться только на равенство или неравенство, поскольку истинные (ггпе) и ложные теа1яе) значения не упорядочиваются. Например, сравнение ггпе > Еа1яе в С№ не имеет смысла. Операнды логических операторов должны относиться к типу Ьоо1, а результат выполнения логической операции также относится к типу Ьоо1. Логические операторы а, ), " и ! поддерживают основные логические операции И, ИЛИ, исключающее ИЛИ и НЕ в соответствии с приведенной ниже таблицей истинности.
Р Ч РаЧР(ЧР "Ч (р Еа1ве Еа1ве ггпе ггие 'Как следует из приведенной выше таблицы, результатом выполнения логической операции исключающее ИЛИ будет истинное значение (ггпе), если один и только один ее операнд имеет значение Сгпе. Ниже приведен пример программы, демонстрирующий применение нескольких операторов отношения и логических операторов. // Продемонстрировать приыенение операторов // отношения и логических операторов. пягпч Бувгеап с1аяв Не1Ьоспрв ( ясак»с чоап Магп() ( 1пс 1, Ьоо1 Ы, Ь2) Оу 1) < 2) Сопяо1е.игагеь»пе("1 < 1")т <= 1) сопво1е.игггеьапе("г <= 2")т ! 1) Сопво1е.Игакевапе("1 != 1")) == 1) Сопво1е.нг1кещпе("Нельзя выполнить"); >= 1) Сопво1е.нггсеЬгпе("Нельзя выполнить"); > 2) Сопво1е.нгагев»пе("Нельзя выполнить"); Ы = ггпет Ь2 = Еа1вет гЕ(Ь1 в Ь2) Сопяо1е.нггсевапе("Нельзя выполнить")т гв(!(Ы а Ь2)) Сопво1е.нгггеЬЕпе("!(Ы а Ь2) — ггве")т ЕЕ(Ы ! Ь2) Сопяо1е.нгасекьпе("Ы ! Ь2 — Ггпе"); 1Е(Ы " Ь2) Сопво1е.Иггсевапе("Ы " Ь2 — Ггпе"); ) Выполнение этой программы дает следующий результат: 1 < 1 <= Еа1ве ггпе Еа1ве ггпе =1 = 1 гд(1 ЕЕ (1 т Е(.( гг(1 гв(1 гв(1 Еа1ве Еа1ве Еа1ве ггпе Еа1ве ггпе ггпе ггпе Еа1яе ггпе ггпе Еа1ве ггпе Еа1ве ггпе Еа1яе Глава 4.