Добавил:
2200 7008 9480 6099 TKFF БЛАГОДАРНОСТЬ МОЖНО ТУТ ОСТАВИТЬ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ 2025 / 4 курса_МТУСИ / 1 КУРС / Информатика / С# для чайников - Мюллер.pdf
Скачиваний:
0
Добавлен:
04.06.2025
Размер:
53.3 Mб
Скачать

О п е р ато р ы

В ЭТО Й ГЛ А В Е . . .

)) Выполнение арифметических действий )eS Логические операции .

ио» Составные логические операторы

атематики создают переменные и выполняют над ними различные действия, складывая их, умножая, а иногда, представьте себе, даже интегрируя. В главе 2, "Работа с переменными", описано, как объ­ являть и определять переменные, но в ней ничего не говорится о том, как их

использовать после объявления, чтобы получить что-то полезное. В этой главе рассматриваются операции, которые могут быть произведены над переменны­ ми. Для выполнения операций требуются лзl4)eл 4(р такие как +, -, =, < или &. Здесь речь пойдет об арифметических, логических и других операторах.

Арифметика

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

Простейшие операторы

 

n

к .. .....

. ..

...

.,.-. . ...

. ....

 

 

к...

.

..-.

......

,

,

.

.

., y..

.,.,....,..

 

. .-к. в

yк.-...,

....-.

.,

.- .

l.. . ..

 

1.-. ...

.-...

 

...

к..-.,...

...

.,...

 

...

....,...

 

..,.. ..-

у-С.,

 

..,. ...

С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 4.1 . Простые операторы

 

 

 

 

 

 

 

 

 

 

 

 

Оператор

 

Значение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- (унарный)

 

Отрицательное значение

 

 

 

 

 

 

 

 

 

 

 

Лa

 

 

 

Умножение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

Деление

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мa

 

 

 

Сложение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- (бинарный)

Вычитание

 

 

 

 

 

 

 

 

 

 

 

 

 

пF

 

 

 

Деление по модулю

 

 

 

 

 

 

 

 

 

 

 

 

щекзeлнопве

сплв едораперев явкяйпоя

O,vК в<

 

 

,деомекзмы.

енл втдек,

 

няйпоя

нал лвыся ьнааонлясл

елне ль нлв

навеллпоя

окова еп едорапера. а

лрыаеоЬ одраваg)ллнопвоннтс

ломкйаонлос

явкяопоя ынарнтж слныо. мепе,

ртж пам ио дреоrc мамл еопакзнто раоосапрлваосто

 

ьлооз едораперi Т

 

 

 

 

.

t (

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b.

O

( Б »

 

 

a

 

Ot

 

 

 

 

 

 

 

 

 

 

Sнааонло аяaдролопавкяоп ое,е \ епрл,апокзнео

ьнааонло арda

 

 

 

 

мдорапер локонля де селыкй

сеиоп ,тпз

вас ноьнамесАmЬоконлоде селыкй

 

анакеалане

декыаонлй

еопапма деоко локонляa 6ам

F S # aравне яaяFш#Sfяеопаa

r

пемu

я(сaл ьнааонло aF S # aравне .a uaF ш #S еопапемa

Ь

.()a

 

 

 

 

 

Срлясоплаоомло едораперт

Wмресо локонля де селыкй)

едролоконi лкя

воов плдев доросоннт ввмдорапер ио локонля де селыкй

но едролокон лкя ал,

оок о дкавайяож

пеаме\ гдеомекзмыдрл локонлл ьнааонлжо дкавайяож

пбамеж

но оы5оопвыоп еопапмае

 

 

 

 

 

 

 

 

 

 

 

 

 

Порядок выполнения операторов

 

 

 

 

 

 

 

 

 

 

 

 

.-.,...

.,.

. ...

...-

.,...

.

1..

.-.-.... .,.

.......Л

-....,.у

 

.-... ....

 

..,...

,,

. .-.,..,

 

 

 

 

 

 

 

 

 

 

 

 

100

е

п..u 0. 01ssc0.u 1.c .1

Что имел в виду написавший такую строку программист? Что надо умно­ жить 5 на 3, а затем прибавить 2? Или сначала сложить 3 и 2, а результат ум­ ножить на 5?

Язык С# обычно выполняет операторы слева направо, при этом ум­ ножение выполняется до сложения - так что результатом приведен­

ного примера будет ыe3о 3

ЗАПОМНИ!

В представленном далее выражении язык С# вычисляет значение n, сначала деля 2 4 на 6, а затем деля получившееся значение на 2 :

=

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

Никогда не полагайтесь на то, что вы (или кто-то иной) помните приоритеты операторов. Нет никакого позора в том, чтобы явно указать подразумеваемый порядок выполнения выражения посред­

ЗАПОМНИ! ством скобок.

Значение следующего выражения совершенно очевидно и не зависит от приоритета операторов:

:им им. н. ш C, е ol a н) ц CттW

Скобки перекрывают приоритеты операторов, явно указывая, как именно компилятор должен интерпретировать выражение. С# ищет наиболее глубоко вложенную пару скобок и вычисляет выражение в ней; в данном случае это ч н злчто3 дает значение сь3В результате получается

:им имe н. ш C т . нl a ч тW цц ) ц C . и

Затем С# продолжает поиск скобок и вычисляет значения в них, что приво­ дит к выражению

:им им=

=

Так что в конечном счете получается, что n равно 6.

ГЛАВА 4 тж даытоани oпoи

Оператор присваи вания

Язык С# унаследовал одну интересную концепцию от С и С++: присваива­ ние является бинарным оператором, возвращающим значение аргумента спра­ ва от него. Присваивание имеет тот же тип, что и оба аргумента (типы которых должны быть одинаковы). Этот новый взгляд на присваивание никак не влияет на выражения, с которыми вы уже сталкивались:

им. й 3 D W

В данном примере 5 * 3 равно 15 и имеет тип int. Оператор присваивания сохраняет это int-значение справа в int-переменной слева и возвращает зна­ чение 15. То, что он возвращает значение, позволяет, например, сохранить это значение еще в одной переменной, т.е. написать

==

Если имеется несколько присваиваний, то они выполняются справа налево. В приведенном выше выражении правый оператор присваивания сохраняет значение 15 в переменной n и возвращает 15, после чего левый оператор при­ сваивания сохраняет значение 15 в переменной m и возвращает 15 (это возвра­ щенное значение в данном примере больше никак не используется).

Такое странное определение присваивания делает корректным, например, следующий причудливый фрагмент:

:им

имС

:им

С

им=

=

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

что может запутать человека, читающего исходный текст вашей про­ СОВЕТ граммы (включая и лично вас), следует избегать, ибо любые неточ­

ности ведут к ошибкам.

Оператор инкремента

Среди всех выполняемых в программах сложений добавление 1 к перемен­ ной - наиболее распространенная операция:

им=

С# расширяет множество простых операторов набором присваивающих операторов, построенных из арифметического оператора и оператора присваи­ вания. Например, n+= l ; эквивалентно n= n+l ; .

Присваивающие версии операторов имеются почти для каждого би­ нарного оператора: +=, -=, *=, /=, % =, &=, =, л=. Детальную информацию о

.аo,

ЧАСТЬ 1 тйео­ни жаощаряяв ао­р евеиерииси

присваивающих операторах можно почерпнуть из соответствующего раздела

справочной системы.

Но и это недостаточно кратко, и в С# имеется еще более краткое обозначе­ ние этого действия - оператор инкремента:

е)имVцц им :

Все три приведенных выражения функционально эквивалентны, т.е. все они увеличивают значение n на 1.

Оператор инкремента достаточно странен, но еще больше странности при­ дает ему то, что на самом деле имеется два оператора инкремента: ++n и n++. Первый, ++n, называется 14 lVг, )E("o а второй, n++, - 1л)1Vг,)E YSРазница между ними довольно тонкая, но очень важная.

Вспомните, что каждое выражение имеет тип и значение. В следующем фрагменте исходного текста и ++n, и n++ имеют тип int:

?им имV

им. ы V :им =

=

=

Чему равны значения р и m после выполнения этого фрагмента? oллH),)T,)p можно выбрать I или 2.) Оказывается, значение р равно 2, а значение m - 1, т.е. значение выражения ++n - это значение n 1л)Ul увеличения, а значение n++ равно значению n увеличения. Значение самой переменной n в обоих вариантах равно 2.

Эквивалентные операторы декремента, n-- и --n, используются для замены выражения n=n-1. Они работают точно так же, как и операторы инкремента.

в

о

гич

но л

.,,

ло

гичП

еское сравнен

и

е

Л

 

п

 

г д

 

Язык С# также предоставляет к услугам программиста целый ряд логиче­ ских операторов сравнения, показанных в табл. 4.2. Эти операторы называются "луг­l), Yг )4) ,ElE (logicalг comparisons), поскольку они возвращают ре­ зультат сравнения в виде значения true или false, имеющего тип bool.

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

Оператор...

...возвращает true, если...

а == Ь

а имеет то же значение, что и Ь

а > Ь

а больше Ь

Мoздз, м, Операторы 103

Соседние файлы в папке Информатика