69740

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

Домашняя работа

Информатика, кибернетика и программирование

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

Украинкский

2014-10-09

50 KB

0 чел.

Самостійне вивчення

Тема 4: Пріоритет і порядок виконання

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

В таблиці 1 приведені операції в порядку зменшення пріоритету. Операції, розташовані в одному рядку таблиці, або з'єднані в одну групу, мають однаковий пріоритет і однакову асоціативність.

Знак операції

Назва

Асоціативність

() [] . ->

Первинні

Зліва направо

- ~ ! * &

++ --  sizeof

Приведення типу

Унарні

Зправа наліво

* / %

Мультиплікативні

Зліва направо

+ -

Адитивні

Зліва направо

<<  >>

Здвиг

Зліва направо

<> <=  >=

Відношення

Зліва направо

= =   !=

Відношення

Зліва направо

&

Порозрядне і

Зліва направо

~

Порозрядне виключаючи або

Зліва направо

|

Порозрядне включаючи або

Зліва направо

&&

Логічне і

Зліва направо

||

Логічне або

Зліва направо

? :

Умовна

Зправа наліво

= *=  /=  %=  +=  -=  <<= >>=  &=  |=  ^=

Просте і составне присвоювання

Зправа наліво

,

Послідовне обчислення

Зліва направо

З таблиці 1. виходить, що операнди, що представляють виклик функції, індексний вираз, вираз вибору элемента і вираз в дужках, мають найбільший пріоритет і асоціативність зліва направо. Приведення типу має той же пріоритет і порядок виконання, що і унарні операції.

Вираз може містити декілька операцій одного пріоритету. Коли декілька операцій одного і того ж рівня пріоритету з'являються у виразі, то вони застосовуються відповідно до їх асоціативності—або справа наліво, або зліва направо.

Слід зазначити, що в мові Сі прийнятий невдалий порядок пріоритету для деяких операцій, зокрема для операцій зсуву і порозрядних операцій. Вони мають більш низький пріоритет, ніж арифметичні операції (складання і ін.). Тому вираз

а - b & 0xFF + 5

обчислюється як

а = b & (0xFF + 5)

а вираз

а + с > > 1

обчислюється як

(а + с) > > 1

Мультиплікативні, адитивні і порозрядні операції володіють властивістю комутативності. Це значить, що результат обчислення виразу, що включає декілька комутативних операцій одного і того ж пріоритету, не залежить від порядку виконання цих операцій. Тому компілятор залишає за собою право обчислювати такі вирази у будь-якому порядку, навіть у разі, коли у виразі є дужки, що специфікують порядок обчислення.

В СП ТС реалізована операція унарного плюса, яка дозволяє гарантувати порядок обчислення виразів в дужках.

Операція послідовного обчислення, логічні операції І і АБО, умовна операція і операція виклику функції гарантують певний порядок обчислення своїх операндів. Операція послідовного обчислення забезпечує обчислення своїх операндів по черзі, зліва направо (кома, що розділяє аргументи у виклику функції, не є операцією послідовного обчислення і не забезпечує таких гарантій). Гарантується лише те, що до моменту виклику функції всі аргументи вже обчислені.

Умовна операція обчислює спочатку свій перший операнд, а потім, залежно від його значення, або другий, або третій. Логічні операції також забезпечують обчислення своїх операндів зліва направо. Проте логічні операції обчислюють мінімальне число операндів, необхідне для визначення результату виразу. Таким чином, другий операнд виразу може взагалі не обчислюватися.

Приклад:

int х, у, z, f();

z = х > у | | f(x, у);

Спочатку обчислюється вираз х>у. Якщо воно істинне, то змінній z привласнюється значення 1, а функція f не викликається. Якщо ж значення х не більше у, то обчислюється вираз f(x,y). Якщо функція f повертає ненульове значення, то змінній z присвоюється 1, інакше 0.

Розглянутий приклад показує основні можливості використання порядку виконання логічних операцій. Це, по-перше, підвищення ефективності за рахунок розміщення найбільш вірогідних умов в якості перших операндів логічних операцій. По-друге, це можливість вставки у вираз перевірок, при помилковості яких подальші дії не проводитимуться. Так, в наступному умовному операторі if читання чергового символу з файлу виконуватиметься тільки в тому разі якщо кінець файлу ще не досягнутий:

if((!feof(pf))&& (с = getc(pf)) ...

Тут feof — функція перевірки на кінець файлу, getc — функція читання символу з файлу

Побічні ефекти

Побічний ефект виражається в неявній зміні значення змінної в процесі обчислення виразу. Всі операції присвоювання можуть викликати побічний ефект. Виклик функції, в якій змінюється значення якої-небудь зовнішньої змінної, або шляхом явного присвоювання, або через покажчик, також має побічний ефект. Порядок обчислення виразу залежить від реалізації компілятора, за винятком випадків, в яких явно гарантується певний порядок обчислень. При обчисленні виразу в мові Сі існують так звані контрольні крапки. По досягненні контрольної крапки всі попередні обчислення, у тому числі всі побічні ефекти, гарантовано проведені. Контрольними крапками є операція послідовного обчислення, умовна операція, логічні операції І і АБО, виклик функції. Інші контрольні крапки:

—кінець повного виразу (тобто виразу, який не є частиною іншого виразу);

—кінець виразу, який ініціалізував вираз для змінної класу пам'яті auto;

—кінець виразів, що управляють виконанням операторів if, switch, for, do, while і вирази в операторі return.

Наведемо приклади побічних ефектів:

add(i +  1, i = j + 2);

Аргументи виклику функції add можуть бути обчислені у будь-якому порядку. Вираз i + 1 може бути обчислений перед виразом i = j + 2, або після нього, з різним результатом в кожному випадку. Унарні операції інкремента і декремента також містять в собі присвоювання і можуть бути причиною побічних эфектів, як це показано в наступному прикладі:

int i, а[10]; i = 0;

а[i+ + ]= i;

Невідомо, яке значення буде присвоєно елементу а [0]—нуль або одиниця, оскільки для операції присвоювання порядок обчислення аргументів не обумовлюється.


 

А также другие работы, которые могут Вас заинтересовать

20378. Комментарий к Гражданскому кодексу Российской Федерации. Часть третья 3.97 MB
  1 комментируемой статьи являются правилами имеющими отношение ко второму из названных элементов свободы наследования а именно к праву наследников на получение наследства. Конституционно гарантированное право наследников на получение наследства определяет исходную позицию ГК который устанавливает специальное правило обеспечивающее законодательную реализацию указания содержащегося в Постановлении Конституционного Суда РФ N 1П: Право наследования предусмотренное статьей 35 часть 4 Конституции Российской Федерации: обеспечивает...
20379. Жилищное право: Учебник 3.79 MB
  Это снижает не только уровень обеспечения социальных гарантий но и степень доверия граждан к ним в связи с чем возникает необходимость уточнить действующие обязательства государства по обеспечению жилыми помещениями отдельных категорий граждан и сформировать единые принципы и механизмы оказания поддержки различным категориям граждан за счет бюджетных средств; необходимость обеспечения устойчивого функционирования жилищного сектора которое позволит удовлетворять жилищные потребности населения без существенного участия федерального центра и...
20380. Комментарий к Гражданскому кодексу Российской Федерации. Часть вторая 7.77 MB
  Вместе с тем данные нормативные положения распространяют свое действие и на отношения связанные с исполнением и прекращением договора включая возможность наступления ответственности сторон за неисполнение и ненадлежащее исполнение договорного обязательства. В 1 содержатся общие нормы применимые ко всем видам договора куплипродажи при условии что они не изменены конкретным договором или специальными нормами касающимися отдельных видов договора куплипродажи 28. Такие изменения не могут однако отменять действия общих норм 1...
20381. КАК УЗНАТЬ ХАРАКТЕР ЧЕЛОВЕКА ПО ЕГО ПОДПИСИ ИЛИ ПРАКТИЧЕСКАЯ ГРАФОЛОГИЯ 217.5 KB
  Наджимов КАК УЗНАТЬ ХАРАКТЕР ЧЕЛОВЕКА ПО ЕГО ПОДПИСИ ИЛИ ПРАКТИЧЕСКАЯ ГРАФОЛОГИЯ ВВЕДЕНИЕ Графология это наука изучающая законы зависимости между почерком и личностью характером человека. РЕКОМЕНДАЦИИ ПО ПРОВЕДЕНИЮ ГРАФОЛОГИЧЕСКОГО АНАЛИЗА В данной работе в основном внимание уделено анализу подписи так как обычное письмо человека как бы причесано оно подчиняется многочисленным правилам правописания и индивидуум не может проявить себя полностью. Умело применять метод логических цепей это значит что если по подписи точно определена...
20382. СУДЕБНАЯ ЭКСПЕРТИЗА (ЭКСПЕРТОЛОГИЯ) 654 KB
  Раскрывается специфика их классификации дается описание каждого класса экспертиз с наименованием предмета объекта и наиболее часто встречаемые вопросы при назначении того или иного вида судебной экспертизы. Типография УВД Оренбургской области ВВЕДЕНИЕ Институт судебной экспертизы в дореформенных правовых актах России существовал в виде отдельных предписаний относящихся к деятельности сведущих лиц...
20383. Курс международного уголовного права 1.15 MB
  Курс международного уголовного права. ПОНЯТИЕ ПРЕДМЕТ РЕГУЛИРОВАНИЯ ПРИНЦИПЫ И ИСТОЧНИКИ МЕЖДУНАРОДНОГО УГОЛОВНОГО ПРАВА 1. Понятие и предмет международного уголовного права 1. Принципы международного уголовного права 1.
20384. Сращивание организованной и экономической преступности – новая форма криминальной активности 270 KB
  Общая характеристика организованной преступности в сфере экономики Современная криминальная ситуация закономерный результат действия комплекса факторов связанных с переходным периодом ошибками и просчетами в решении стратегических и тактических задач реформирования социальной жизни. Многократно повысилась доходность от преступлений совершаемых не только в традиционном криминальном бизнесе но и в новых отраслях и сферах легальной экономики нефтебизнесе кредитнофинансовой сфере обороте спирта и алкогольных напитков операциях с...
20385. Методика расследования происшествий на железнодорожном и авиатранспорте 1.17 MB
  Нарушения правил безопасности движения и эксплуатации железнйдорожного и воздушного транспорта могут выражаться как в форме действия превышение скорости перевод стрелки под поездом прием поезда на занятый путь самовольное занятие перегона и т. Так не могут быть привлечены к уголовной ответственности осмотрщикиремонтники которые в нарушение действующих правил безопасности не осмотрели тормозную систему и отправили поезд с перекрытым концевым краном если машинист поезда проверяя на перегоне действие тормозной системы на...
20386. Основи підприємницької діяльності 1.1 MB
  Визначення переваг створюваного підприємства. Припинення діяльності підприємства. Конкурентоспроможність підприємства 68 Тема 10. 83 Гозділ №3 ЕКОНОМІКА ПІДПРИЄМСТВА ТА ЗОВНІШНІ ЧИННИКИ ЙОГО ДІЯЛЬНОСТІ.