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]—нуль або одиниця, оскільки для операції присвоювання порядок обчислення аргументів не обумовлюється.


 

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

78510. Объединение сетей средствами сетевого и транспортного уровней: протоколы, адресация, маршрутизация 26 KB
  Это отличает их от протоколов канального уровня которые передают пакеты только получателям в той же ЛВС. Для сетевого уровня необходима адресация. Протоколы сетевого уровня многоуровневой модели сетевого взаимодействия отвечают за передачу данных от отправителя к получателю по интерсети. Самый популярный протокол сетевого уровня – протокол IP IPадрес привязывается к сетевому адаптеру который выполняет упаковку пакета данных транспортного уровня в дейтаграмму идентификацию систем в сети по их IPадресам определение наиболее эффективного...
78511. Основные типы аппаратных сетевых устройств: назначение, принципы функционирования, характеристики 28 KB
  Поэтому адаптеру необходим буфер для временного хранения данных прибывающих от компьютера или из сети в то время когда адаптер занят формированием кадра и его подготовкой к обработке. Концентратор обычно имеет несколько портов к которым с помощью отдельных физических сегментов кабеля подключаются конечные узлы сети – компьютеры. Концентратор объединяет отдельные физические сегменты сети в единую разделяемую среду доступ к которой осуществляется в соответствии с протоколов локальных сетей. Приемопередатчики трансиверы и повторители...
78512. Технологии удаленного доступа и глобальных сетевых связей 37 KB
  Понятие удаленного доступа к сети включает различные типы и варианты подсоединения одиночных компьютеров либо малых домашних или офисных сетей к территориально отдаленным крупным сетям. Подключение к глобальной сети может осуществляться одним из способов: удаленный доступ по коммутируемой телефонной линии. Наиболее развитыми но не единственными сетями такого типа являются так называемые сети с интегральными услугами ISDN цифровые сети с интегральными услугами в которых не только осуществлен переход к полностью цифровой форме передачи...
78513. Назначение и функции операционных систем, их архитектурные типы, классификация и основные семейства 27.5 KB
  ОС – это комплекс управляющих и обрабатывающих программ, который, с одной стороны, выступает как интерфейс между пользователем и аппаратными компонентами вычислительных машин и вычислительных систем, а с другой стороны предназначен для эффективного управления вычислительными процессами
78514. Операционные системы: концепции и механизмы управления процессами и ресурсами 38 KB
  Функциями ОС по управлению памятью являются: отслеживание свободной и занятой памяти выделение памяти процессам и освобождение памяти при завершении процессов вытеснение процессов из оперативной памяти на диск когда размеры основной памяти не достаточны для размещения в ней всех процессов и возвращение их в оперативную память когда в ней освобождается место а также настройка адресов программы на конкретную область физической памяти. Так как во время трансляции в общем случае не известно в какое место оперативной памяти будет загружена...
78515. Операционные системы: управление файлами и файловые системы 28.5 KB
  Файловая система NTFS. Файл в системе NTFS – это не просто линейная последовательность байтов как в системе FT. Отличительными свойствами ФС NTFS являются: Поддержка больших файлов и больших дисков объемом до 264 байт. Структура тома раздела NTFS: Все пространство тома NTFS представляет собой либо файл либо часть файла.
78516. Основные характеристики и особенности организации современных операционных систем 26.5 KB
  Типы ОС: общие специальные и специализированные бортовой автокомпьютер CISCO – управление коммутаторами и маршрутизаторами Общая характеристика Windows XP. Windows XP объединяет в себе лучшие качества предыдущих версий Windows: надежность стабильность и управляемость – от Windows 2000 простой и понятный интерфейс а также технологию Plug Ply – от Windows 98. В Windows XP появился новый более эффективный интерфейс пользователя включающий новые возможности группировки и поиска документов новый внешний вид возможность быстрого...
78517. Основные задачи системного администрирования и их практическая реализация 33 KB
  Важнейшей сферой профессиональной деятельности специалистов в области информационных технологий является управление администрирование функционированием ОС как отдельных компьютеров так и их групп объединенных в вычислительные сети. Системное администрирование в общем случае сводится к решению следующих основных задач: управление и обслуживание пользователей вычислительной системы – создание и поддержка учетных записей пользователей управление доступом пользователей к ресурсам; управление и обслуживание ресурсов вычислительной системы –...
78518. Понятие, назначение и основные принципы организации распределенной обработки информации. Архитектура, свойства и характеристики распределенных систем 29.5 KB
  Понятие назначение и основные принципы организации распределенной обработки информации. Под распределенной обработкой информации понимается комплекс операций с информацией проводимый на независимых но связанных между собой ВМ предназначенных для выполнения общих задач. Возможность взаимодействия вычислительных систем при реализации распределенной обработки информации определяют как их способность к совместному использованию данных или к совместной работе с использованием стандартных интерфейсов. Целью распределенной обработки информации...