Главная » Просмотр файлов » Р.У. Себеста - Основные копцепции языков программирования (2001)

Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 74

Файл №1160794 Р.У. Себеста - Основные копцепции языков программирования (2001) (Р.У. Себеста - Основные копцепции языков программирования (2001)) 74 страницаР.У. Себеста - Основные копцепции языков программирования (2001) (1160794) страница 742019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 74)

° Какое смешивание типов позволено в выражениях? 6.2.1. Порядок вычисления операторов Вначале мы рассмотрим правила языка, задающие порядок выполнения его операторов. 6.2.1.1. Приоритет оператора Значение выражения зависит, по крайней мере частично, от порядка вычисления входящих в него операторов. Рассмотрим следующее выражение: А+В*С Предположим, что значения переменных А, В и С равны, соответственно, 3, 4 и 5. Если вычисление производится слева направо (вначале сложение, а затем умножение), то результат равен 35. Если же вычислить значение выражения справа налево, то оно окажется равным 23.

2У7 б.2. Арифметические выражения допускается, тогда как выражение й ~ — В * С (как правило) нет. Как будет показано в разделе 6.2.Е2, в большинстве языков программирования приоритет унарных операторов мало существен. Ниже приведены приоритеты арифметических операторов в некоторых распространенных языках программирования. ГОНТРАК Наивысший Равса1 *, /, «$дзг, все +, С Ас(а жос( постфиксные ++, -- **, еЬе префиксные ++, -- *, /, * / унарные +, * / бинарные все унарные бинарные + Ф Нижайший Гдово 6.

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

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

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

Унарное сложение называется тождественным оператором (к)епйгу орегагог). поскольку с ним обычно не связано никакое действие, и, следовательно, оно не влияет на операнд. Эллис и Страуструп, обсуждая язык С++, назвали этот оператор историческим несчастным случаем и справедливо указали на его ненужность (Ейга апд Вггоцзггир, ! 990).

Существующий в языке Зача унарный плюс фактически эффективен только тогда. когда его операнды принадлежат к типам сЬак, еЬоке нли Ьуце — этот оператор выполняет преобразование значений этих типов в тип хпш Унарный минус, разумеется, всегда оказывает влияние на операнд — он изменяет знак его значения. Во всех распространенных императивных языках программирования оператор унарного минуса может помешаться либо в начале выражения.

либо гдеглибо внутри него. Единственным условием является то. чтобы он непосредственно не примыкал к другому оператору, для чего используются круглые скобки. Например, следующее выражение А+ (" В) * С :. ч 1м упомянутые операторы. Оператор ** означает возведение в степень. Оператои с)зч языка Разса! описаны в разделе 6.3. Оператор я языка С илентичен операто= з6 языков Рааса) и Ада: оба они принимают два целых операнда и вычисляют вели;статка от деления первого операнла на второй. Операторы +ч и -- языка С опится в разлеле6.7.5.

Правила приоритетов в языках Слл и С аналогичны, за -."~еипем того, что в языке Сч все операторы ++ и -- имеют равный приоритет. - -., ла приоритетов языка )ача пояностью совпадают с правилами языка С.л+. Опера. аВя в языке Аоа является унарным и вычисляет абсолютное значение операнда. Ч необычном языке АР(..

описываемом в следующем разделе, все операторы имеют - ый приоритет. ::.е стоит лумать. что порядок выполнения операторов определяется исключительно гитетом операторов: кроме приоритетов, на него влияют правила ассоциативности, .;чатриваемые ниже. 6.2. 1.2. Ассоциативиоств лзссмотрим следующее выражение: -ВчС-В . и операторы сложения и вычитания имеют равный приоритет, то правила приоритетов - ". ничего не могут сообщить о порядке выполнения операторов данного выражения.

лш вопрос о том. какой из операторов. имеющих равный приоритет, выполняется ... зь лъ отвечают правила ассоциативности (аззос)абч)зу). Ассоциативность оператора -.ет быть правосторонней или левосторонней, что означает выполнение операторов глва налево или слева направо. соответственно. В распространенных языках программирования правила ассоциативности операторов -сзеляют, что операторы с равным приоритетом выполняются слева направо. исклю:-ие составляет только оператор возведения в степень (если он существует в языке), е оший противоположную ассоциативность.

Рассмотрим следующее выражение языка - ззса): ;рным в нем выполняется левый оператор. Однако поскольку операция возведения в . епеиь в языке ЕОКТКАХ имеет правую ассоциативность, то в выражении '* В ** С -; овым будет выполняться правый оператор. В языке Ада оператор возведения в степень неассоциативен, поэтому выражение з языке Ада недопустимо. Чтобы указать правильный порядок выполнения операторов в эком выражении, следует использовать скобки: ,А ** В) ** С ели А ** (В ** С) Теперь мы уже можем объяснить, почел~у приоритет унарных операторов зачастую не важен. В языке ГО)лТКАХ унарные и бинарные операторы имеют равный приоритет, 2УР 6.2. Арнфмвтичвскне выражения однако в языке Ада (и большинстве других распространенных языков) унарный минус имеет более высокий приоритет, чем бинарный. Рассмотрим следующее выражение: Поскольку в языке РО)(ТКАЛ операторы унарного и бинарного минуса являются лево- ассоциативными, а в языке Аба приоритет унарного оператора выше бинарного, то в обоих языках это выражение эквивалентно следующему: 1-А) — В Рассмотрим такие выражения: -А/В А"В А *+ В В первых двух примерах несущественно, приоритет какого оператора выше: любой порядок выполнения приводит к одному и тому же результату, чего нельзя сказать о последнем выражении, Из распространенных языков программирования только языки РО)(ТйА1Ч и Ада содержат оператор возведения в степень.

В обоих языках этот оператор имеет более высокий приоритет, чем унарный минус, поэтому запись А ** В эквивалентна выражению 1А ** В) В этих языках унарные операторы, появляющиеся не в крайней слева позиции выражения, должны заключаться в скобки. поэтому в таких ситуациях им будет обеспечен наивысший приоритет (подробнее о скобках рассказывается в разделе 6.2.13). Ниже приведены правила ассоциативности в наиболее распространенных языках программирования.

Яаык Ассоциативность РОВТВА)Ч Левосторонняя: *, /, ь. Правосторонняя: ** Рааса) Левосторонняя: все С Левосторонняя: постфиксный ++, постфиксный --, *, /, В, бинарный , бинарнь:й Правосторонняя: префиксный +ь, префиксный унаоный ь, унарный— Левосторонняя: *, /, ь., бинарный +, бинарный Правосторонняя: ++, --, унарный -, унарный + Аба Левосторонняя: все, эа исключением ** Неассоциативен: Сэ+ АхВ+С вначазе выполняется операция сложения, а затем — умножения (оператор умножения этого языка обозначается символом х). Если переменные А, В и С содержали значения 3, 280 Глава б. Выражения и операторы присваивания Как указывалось в разделе 6.2.! .1, в языке АРЕ все операторы имеют равный приоритет.

Следовательно, порядок выполнения операторов этого языка определяется исключительно правилом ассоциативности, которая в данном языке является правосторонней. Например, в выражении .. соответственно. то результатом вычисления приведенного выше выражения языка : -'; б) лет 27. ' 1ногие компиляторы используют математическую ассоциативность арифметических :гзторов.

Это означает, что правила ассоциативности не влияют на значение выраже-. созержашего только такие операторы. Например, сложение является математически цнативной операцией, поэтому в математике значение выражения .:заисит от порядка выполнения операторов. Если операции над числами с плавающей кой. выполняемые матемазически ассоциативнымн операторами, также являются ас. сы пвнымн, то компилятор может использовать этот факт лля проведения некоторой с.ой оптимизаш<и. В частности, поменяв порялок выполнения операторов.

компиля.- оожез создать более быструю программу выполнения выражений. Фактически. комгяторы осуществляют именно такие типы оптимизации. г сожалению, представление данных в виде чисел с плавающей точкой н арнфмети:;кис операции с величинами такого вида являются только приближением математиче.-, з действий (вследствие ограничения размеров). То, что математический оператор ас...изтивен, еше не означает ассоциативности соответствующего оператора, выполняю..:о действия иал числами с плавающей точкой. В действительности, процесс будет .- ого ассоциативен только в том случае, если все операнды и промежуточные результачогут быть точно представлены в виде чисел с плавающей точкой.

Существуют. наг имер. патологические ситуации. в которых целочисленное сложение в компьютере не .; .щшативно. Предположим, что программа должна вычислить следующее выражение: В+С+0 .=и этом переменные А и С являются очень большими положительными числами, а В и — отрицательными числами с очень большой абсолютной величиной. В этой ситуации . з > кение чисел А и В не вызовет переполнения памяти, а сложение А и С вЂ” вызовет. '.. алогично, сложение чисел С и 0 переполнения не вызывает, чего нельзя сказать о .-.же><ии чисел В и В. Из-за ограниченности компьютерной арифметики сложение в .

ч случае катастрофически неассоциативно. Следовательно, переупорядочение компи.=.тором операций сложения отразится на значении выражения. Разумеется, это прел: звляет проблему. обойти которую может программист (предполагается, что приблизи- .>ьные значения переменных известны). Обеспечить безопасный порядок выполнения :мраторов можно с помощью скобок (см.

Раздел 6.2.1.3). Впрочем, проблема может четь более скрытую форму, и в этом случае определить нужную последовательность пераций будет намного труднее. 6.2. 1.3. Ск<збкн Изменить приоритет и правила ассоциативности программист может, разместив в выражении скобки. Заключенная в скобки часть выражения имеет приоритет выше, чем свободная. Рассмотрим следующее выражение: ,'А+ В) * С Несмотря на то что умножение имеет более высокий приоритет, чем сложение. в данном выражении первым будет выполнено именно сложение. Математически это в высшей степени естественно: в этом выражении первый операнд оператора умножения не доступен.

Характеристики

Тип файла
DJVU-файл
Размер
9,5 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6417
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее