Головна

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

  1.  I. Завдання для обов'язкового виконання
  2.  I. Завдання для обов'язкового виконання
  3.  I. Завдання для обов'язкового виконання
  4.  I. Завдання для обов'язкового виконання
  5.  I. Завдання для обов'язкового виконання
  6.  I. Завдання для обов'язкового виконання
  7.  I. Завдання для обов'язкового виконання

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

Пріоритет і асоціативність операцій в мові Сі

 знак операції  Найменування  асоціативність
 () []. ->  первинні  Зліва направо
 + - ~! * & ++ --sizeof Приведення типу  унарні  Справа наліво
 * /%  мультиплікативні  Зліва направо
 + -  адитивні  Зліва направо
 >>  зрушення  Зліва направо
  <=> =  ставлення  Зліва направо
 ==! =  ставлення  Зліва направо
&  порозрядне І  Зліва направо
^  Порозрядне виключає АБО  Зліва направо
|  Порозрядне включає АБО  Зліва направо
 &&  логічне І  Зліва направо
 ||  логічне АБО  Зліва направо
 ?:  умовна  Справа наліво
 = * = / =% = + = - = « = » = & = | = ^ =  Просте і складене присвоювання  Справа наліво
,  послідовне обчислення  Зліва направо

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

13) Перетворення типів (при присвоєнні; явні; при викликах функцій).

При виконанні операцій відбуваються неявні перетворення типів в наступних випадках:

- При виконанні операцій здійснюються звичайні арифметичні перетворення;

- При виконанні операцій привласнення, якщо значення одного типу присвоюється змінної іншого типу;

- При передачі аргументів функції.

Крім того, в С є можливість явногопріведенія значення одного типу до іншого. В операціях присвоювання тип значення, яке присвоюється, перетвориться до типу змінної, яка отримує це значення. Допускається перетворення цілих і плаваючих типів, навіть якщо таке перетворення веде до втрати інформації. Ціле зі знаком перетвориться до коротшого цілому зі знаком, за допомогою усічення старших бітів. Ціле зі знаком перетвориться до більш довгому цілому зі знаком, шляхом розмноження знака. При перетворенні цілого зі знаком до цілого без знака, ціле зі знаком перетвориться до розміру цілого без знака і результат розглядається як значення без знака. Перетворення цілого зі знаком до плаваючого типу відбувається без втрати інформації, за винятком випадку перетворення значення типу long int або unsigned long int до типу float, коли точність часто може бути втрачена. Ціле без знака перетворюється до коротшого цілому без знака або зі знаком шляхом усічення старших бітів. Ціле без знака перетворюється до більш довгому цілому без знака або зі знаком шляхом доповнення нулів зліва. Коли ціле без знака перетворюється до цілого зі знаком того ж розміру, бітове подання не змінюється. Тому значення, яке воно представляє, змінюється, якщо знаковий біт встановлений (дорівнює 1), тобто коли вихідне ціле без знака більше ніж максимальне позитивне ціле зі знаком, такої ж довжини. Цілі значення без знака перетворюються до плаваючого типу, шляхом перетворення цілого без знака до значення типу signed long, а потім значення signed long перетворюється в плаваючий тип. Перетворення з unsigned long до типу float, double або long double виробляються з втратою інформації, якщо значення, яке потрібно більше, ніж максимальне позитивне значення, яке може бути представлено для типу long. Величини типу float перетворюються до типу double без зміни значення. Величини double і long double перетворюються до float c деякою втратою точності. Якщо значення занадто велике для float, то відбувається втрата значущості, про що повідомляється під час виконання.

При перетворенні величини з плаваючою точкою до цілим типам вона спочатку перетворюється до типу long (дрібна частина плаваючою величини при цьому відкидається), а потім величина типу long перетвориться до необхідного цілого типу. Якщо значення занадто велике для long, то результат перетворення не визначений. Перетворення з float, double або long double до типу unsigned long проводиться з втратою точності, якщо значення, яке потрібно більше, ніж максимально можливе позитивне значення, представлене типом long. Перетворення, що виконуються над аргументами при виконанні функції, Залежать від того, чи був заданий прототип функції зі списком оголошень типів аргументів. Якщо заданий прототип функції і він включає оголошення типів аргументів, то над аргументами у виклику функції виконуються тільки звичайні арифметичні перетворення. Ці перетворення виконуються незалежно для кожного аргументу. Величини типу float перетворюються до double, величини типу char і short перетворюються до int, величини типів unsigned char і unsigned short перетворюються до unsigned int. Можуть бути також виконані неявні перетворення змінних типу покажчик. Ставлячи прототипи функцій, можна перевизначити ці неявні перетворення і дозволити компілятору виконати контроль типів. Явне перетворення типів може бути здійснене за допомогою операції приведення типів, яка має формат:

(Ім'я типу) операнд

У наведеній записи ім'я типу задає тип, до якого повинен бути перетворений операнд.

14) Оператори мови Сі (поняття оператора; порожній оператор; складовою оператор; оператор вираз; умовний оператор if; оператор покрокового циклу for; оператор циклу з передумовою while; оператор циклу з умовою поста do; оператор продовження continue; оператор перемикач switch; оператор розриву break; оператор переходу goto; оператор повернення return).

 операції присвоювання |  Оператор переходу goto


 вихідна програма |  Час життя і область дії |  Простір імен. |  Односпрямований (однозв'язний) список |  Кільцевій однозв'язний список |  многосвязной список |  Речовий тип даних |  описувачі |  оголошення покажчика |  Оголошення змінної на внутрішньому рівні |

© 2016-2022  um.co.ua - учбові матеріали та реферати