А.А. Белеванцев, С.С. Гайсарян, Л.С. Корухова, Е.А. Кузьменкова, В.С. Махнычев - Алгоритмы и алгоритмические языки (1113416), страница 2
Текст из файла (страница 2)
Символьные консгантгя записываются в одинарных кавычках, например, "а ', ' 5'. Специальные символы, «экие, как перевод строки, табуляция, а также сам символ одинарной кавычки могут задаваться с помощью символа ', (сябратиый слэш), который требует специально Толковать следузоший за ним симВОл или «юследовательность симВОлОВ (т.п.
свсаре-последовательность), Так, перевод строки соответствует символу ' Дп ', табуляция — символу одинарная кавычка — символу ' «' '. Можно указать код символа через последовательность шестнадцатеричных цифр ',х, например, '1Х20' в кодировке АЗС() соответствует символу пробела. Символ с кодом 0 записывается как ' ',0 '. Для поддержки символов в расширенных кодировках ((!П(со«)е) используется префикс 1л 1'В' — символ с в 1: 1(си(е. Значения целочисленных типов хранятся в позиционной двоичной системе счисления. Знаковый и беззнаковый варианты одного и того же целого типа имеют «цзин и тот же размер. При этом для беззнаковых -,.-битных типов возможные значения переменной данного типа лежат мся«ду О и 2' -ц Для знакоВых и-битных типОВ Один бит «ПВОДится на знак, а Остальньш биты храиЯт моДуль числа.
Сп рицательные числа, как правило, представляются в зюполнительном коде: если х<О„то и-1 бит, хранящие число х, представляются как 2" ' — !х !, При этом необходимо, ггобы ! < ! х ~ <2' —. Представимые в знаковом;битном типе числа находятся между -2' " до 2' -1. .1адача. Представить в дополнительном коде для 3-битного цслогО типа числа О, 1. 12. 64. 127, -1, -4, -1, -128, используя как двоичную, так и шестнадцатери шую системы счисления. (Ол!Веты! 0 = 00000000 =- Ох00, 1 = 00000001 =- ОК01, 12 = ОК00001100-0хОС, 64 = 01000000 ." Ох40. 127 .-= 011!1111 = Охи -! .= !1!1!!11 = ОТР1 -4 =- !11!1100 = ОхР(."„ -12 =- Ц10 1111 =- ОКЕ!т, -!23 = 10000000 =- ОТ801. Объявление переменной состоит из описания типа переменной, ее имени и необязательной инициализации: зпг х; ьнзв"'ННОГО 1Опц у=5; э'дпеб эиаг я = — 2.
В качестве выражения для инициализации глобальных переменных может выступать константное выражение, т.е. такое выражение, которое может быгь вычислено на этапе компиляции; для локальных псремснг!Ых можно использоВать любое выражение. При отсу~ствии инициализации глобальных переменных они обнуляются компилятором (неявная ннн!1!Лг!!!За!!Ия), Напротив, локальным переменным всегда необходимо присваивать значение вручную: неинициализированные локальные переменные имеют неопределенное значение при выполнении программы, а ооршцение к таким !!сременныы, скорее всего. приведет к неверной работе про!Раммы и являе!ся На~ты~ источником ошибок.
При объявлении перемепнь!х часто используют специ!!)Икаторы классов памяти всат го, ех ье гп н каалификатор с ос! Б и: с,.пв; - значение переменной не будет измен гьс пос! е щн!циализации, например, сопя! !и! з!Ве = )00; При попытке измснить пс(зсменную произОЙдет Ошиб!Са на этапе компилЯЦИИ.
,;,",аг='с — место под переменную будет выделено в татической памяти, Поступ к переменной возможен во время всего выполнения программы, а ее инициализация выполняется до начала работы программы. ,Ныл го — место под глобальную переменную выделяется при ее ооъявлении в другом файле, инициализация !Нкже вьп!Олняется в другом файле„доступ к переменной возможен во время всего выполнения программы. Наибсзлее часто используемым выражением является штсрапия присваивания = . ЛВВая часть присВНИВаьп!я долж!ьз обозначать объект памязн (будем рассматривать пока только имя переменной), правая — являться выражением (например, а =- Ь+с, где а, Ь, с -- целочисленные переменные). Результатом присваивания является изменение Обьеюа памяти, т.е, побочный эффсклг.
Обратите внимание, что прнсваиванне является операцией и генерирует значение — результатом присваивания является значение левой части. С!!Сдоватсльно, возмо'кно вьшисазь цспочку п)зисВанВаний (а = Ь =- с-'б). при этом операция присваивания ассоциируется справа налево (т.е, сначала вычисляется выражение с О, его результат записывается в переменную Ь, а потом — в переменну!о а, побочнь!м эффектом мого выражения является изменение переменных а и Ь). Арифметические операции над целочисленными значениями (без побочного эффекта) бывают одноместные (одноместный илн унарный минус "-" и плюс "+") и двухместные (сложение "ч-", вычитание "-", умножение '*"", !О деление нацело "~'", остаток от деления нацело "%"). Обратите.," внимание, что запись "-23" считается константным выражением, а не целочисленной константой: в этом: Выражении Операция унарнОГО минуса примснсиа к", целочисленной константе 2 3.
При делении нацело результат всегда округляется в '-, сторону нуля н вьнзолняется равенс~во 1ауЬ! 'Ь ь ВИШЬ а, поэтому знак осгатка совпадает со знаком делнмопз; — й 2725 = -5„-27$5 = -2, -27 В-5 = -2. 27В-5 =- 2, Примеры выражений также содержатся в тексте программы на рнс. 1. 2,1.1. О приведении типов операндов. При Вычислении арнфмстнчсскнх ОпсраЦНЙ с ДВ)ГИЯ операндами, а также при выполнении операции присваивания моя!ет автоматически выполняться неявное преобразование операндов Гириисдеиие ь с к !)Ркгох!у !Лип!:).
Для двуместных арифметических операций приведение типов выполняется по следу!О!Цим правилам: 1) Если операнды имеют различные типы„то ОСУ!ЦЕСТВЛЯЕТСЯ НХ ПРиведенне к общему типу. Если один из типов операндов — вещественный, то второй штсранд тоже приводится к вещественному типу, и общим типом будет наибольший вещественный тип нз типов операндов 1т.с.
для т1оав и ОООЬ1с — с!ООЬ1с„для 3ОНЬ)с и 1опй с1ООЬ1Π— 1опй ~ООЬ1с и т.п.). Например, для Гзолучсчп!я Вещественно! О результата Операции деления 3/2 необходимо один из операндов сделать вещественным, например, добавив точку В одну из констант: "3.22". Иначе результатом операции будет целое число 1, а не вещественное число 1,5. 2). Е ). 'ели есть операнд целого типа короче, чем 1ПЬ !Т.е.
знаковый или беззнаковый вариант эйогв или сйаг), н все значения этого типа могут быть представлены как !и!. то он ,егся к зпв; иначе - к Опа'О!Оес! ' г!'. Ио .,б)залование называется !целочисленное расширениея ~зп!сдс! Рготоиоп) н вьшолняется для избежания потерь >чности п1зи Вь$числсниях. Нап)зимс)х п)зи сложении двух р~менных типа зйогь обе переменные приводятся к типу пс, и само сложение выполняется В типе 1пь.
3) Д!!я операндов целых типов неявное приведение типов управляется целочисленным рангом приведения типа. Ранг выбирается таким образом, что ранг типа 1слзй 1ОГ.О больн!с ранГВ 1опй, который В сВОю Очсредь больпзс рипа зр - и т.д. до сйаг. Ран! знаков!Тго н беззнакового варианта одного целого типа совпадают. При совпадении знаковости типов операндов операнд типа с меныпим рангом преобразуется к операнду типа с большим ранпзм, Прн несовпадении знаковости выполняется операция приведения, в которой также.
как правило, операнд типа меньшего ранга прсобразустсЯ к типу Опсранда с Оольшим ранГОм. Арифметическая операция выполняется после неявного приведения типов, н типом резульзата является тип. к кото)Тому были привсДсны Оба Операнда, Необходимо помнить. Что прн неявном Г!ривсдснии целых типов операнд знакового типа может оыть приведен к Опсранду ОсззнакОВОГО ти!Та и, если значение Опс1занда зпакови.о типа кприцатсльно, произойдет переполнение с возможной Выдачсй ОшиоочнОГО результата Вычисл\.'ния. Например, на современной системе с 4-байтовыми типами 1ПЬ и цпэ)дпсс1 1пь пусть цпв'упса зп' ц =- 50; йпв — -500; 1ПЬ ез = 1 у н, Значение переменной гев будет равно 85899335, т к. прн вычислении выражения 1уц !зперанд =' будет приведен к беззнаковому тини и его значение будет равно 2зз-500 вместо -5ОО, а результат деления будет приведен обратно к знаковому типу 1П-, для избежания таких 01пибок крайне Рекомсндустся выпОлиять';! арифметичсские ьн[сраг[ии над знакОВьияи цслыми типами.
Йри присВВНВанни пс(!сменных различнь[х типов такжс вьп10лнЯСГСЯ неявное привеДсннс типОВ: сели нс Вес) Значсний типа правой части мОГуг быть представлен[1 типом ( левон ~аст~, ТО происходит отсс~[синс с[арьпих битов или 3 прсврап[снис знакового пита в значыций (для целых типов)„, либО Округление или усечснис числа ллЯ плавак[кцих т[гпо. Капримср, 1) если ВЗЙГ[сс[ сг[1[Г с =- -."[, Цпазйпес( 01[аь. Ос и' [ Оба Г является Й-битныз[ типом. То после по =- 0; значение';: ц буг~ег рзвно 233 2) если В13[эть 3 -- 920 и тип БЬО1[3 — 16-битный тип, то ' после с = ..; Зна~[сние сбчдстравно-1Й4.
Явное приВсденис типов возможно с помоц[ыо Вьгражсния [1[урс[ ехрГ: Напримс)х для ПОлучсниЯ: Вец[ественного Результата Деления В переменной б типа Г)оцЬ[е суммы двух целых переменных а И Ь 1[а ДВВ можно испольЗОВС Гь Выражение с[ =. 1 (боцЬ)с! [а. Ь! 1 1 2. ь(асто ВОзникаст иеооходимость Записать 1х:зультат двухместной Операции в один из Операндов. С[ этом случае можно вос[тользоваться укороченным 1[риссаиван[1СЯ[: а ор Ь эквив~зентно а ор-- Ь, Такие присваивания поддерживаготся для Всех двухместных Операций. Арифыст[и[сскими Операциями с побочным эффектом, ЛОМНМО укорочсни[,[х присВаиВаний. являк1тся Опсрации инкрсмснта ь ' и дскрсмснта — — дВ)х форм — прсфиксной (знак Операции до Операнда) и постфикснОЙ (послс Операнда), Побочный эффект этих операций — увеличение (соответственно умсньпьснис) Значения операнда на единицу, а Рсзультат операции — значсиис 01ГВОанда до измснсння (для постфиксной формы) либо после изменения (для прсфиксной ф.:..Рмь[) 1(н1,'[им[".*1, если !.и' а '= 5, Ь .
3. т0 Значение .- "[Н1я а- — -- Ь равно 8, 1кооочныи эффскт — а:- 4 В[ [Ражсни зиа [ение [е выраженпЯ а ' — -Ь Равно 7, пооочный эффект — Ь Операции сравнения (равно "=-=", не Равно ":'=-") и СП'НО[В[в . [пения (болыь1С ь . мсныпс <, больппс или 13ВВИО >=, меныпе или [ЗВВно "<='-.") Генср[[рукэт результат типа (и[; С~[Пни[ТУ, если ОТНОП[ение ИстиннО, И 1) В ПРОТИВИОМ случае Двумя рс[кс используемьпии Операциями явля10тся Операция ПОслсдовапсльноГО Вььчислсния ", " и 'словная Опе [ация '* :".
В опсраиии "," операнды вычисляготся слева направо, а Результатом Опера[ГНИ являс1ся Значение послслнсГО Вычнсленно[ О выражения: в Выражснии (Ь -::, Ь .1. 2) с1кача[ка псрсменн[эй Ь присваивается значение 5, потом вы [Не[[Летел выражение .;;, Равное 7. и рсзул[ггаз заносится в псрсмениуго а. В Опсрации "сх)ЗГ) 7 ех(.Г2: Вхркб" сначазка ьычисэяе[ "Я Як[раск нис ехо 1 и ьсэи с[0 значение рзл[пп[о От нуля, 10 Резу:1ьттпом Всей Оп[."13ации яВлястся Значснис выра'кения ех Гья иначе — Значение выражения ех' Г).
услов[кая Опс)кация, как и Операция присВЯНВання, ассоциирустся справа налево, .с. Выражение а 7 Ь : с 2 а : е эквивалентно (а 2 Ь с с;: 011. 70чьой скс[)осеапьч, или [почкой 111!Сясдпст111[слы[[~!х ['ы'пкисчуй (зсццспсе Р01Л1). НВЗыВастся момент' ВО время ьыпо пгсния про[ра'п[ы (иногзз ЙРограмме). в котором вес побочные эффекты предыдуьцих в['['п[сл* ний Закончены, а ноВь[х — нс начаты. В ко(313ектнОЙ программе между двумя точками последов[тгсльных вьпп[слений изменение значения Г[ерек[еннг[Й возможно не бо'1ес однОГО Раза, при ЭТОМ старое значснис читастся тОлько ОП1рсделения иОВОГО.