Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСП_ЛЕК-1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
415.74 Кб
Скачать

Перетворення при обчисленні виразів.

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

Розглянемо загальні арифметичні перетворення:

1 .Операнди типу float перетворяться до типу double.

2.Якщо один операнд long double, то другий перетвориться до цього ж типу.

З.Якщо один операнд double, то другий також перетвориться до типу double.

4. Будь-які операнди типу char і short перетворяться до типу int. 5.Будь-які операнди unsigned char чи unsigned short перетворяться до типу unsigned int.

6.Якщо один операнд типу unsigned long, то другий перетвориться до типу unsigned long.

7.Якщо один операнд типу long, то другий перетвориться до типу long. 8.Якщо один операнд типу unsigned int, то другий операнд перетвориться до цього ж типу.

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

Приклад:

double ft, sd;

unsigned char ch;

unsigned long in;

int i;

Модуль 2 Інструкції організації розгалужень.

1. Типи розгалужень. Умовний оператор if

1. Типи розгалужень. Умовний оператор if

Умовний оператор if використається для розгалуження процесу обчислень на два напрямки. Формат оператора:

if ( вираз ) оператор_1; [else оператор_2;]

Спочатку обчислюється вираз, що може мати арифметичний тип або тип покажчика. Якщо воно не дорівнює нулю (має значення true), виконується перший оператор, інакше - другої. Після цього керування передається па оператору, що є наступним за умовним.

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

Приклади:

// 1// 2// 3// 4// 5

if (а<0) b = 1;

if (a<b && (a>d || a==0)) b++; else {b *= ; a = 0;}

if (a<b) {if (a<c) m = a; else m = c;} else {if (b<c) m = b; else m = c;}

if (a++) b++;

if (b>a) max = b; else max = a;

У прикладі 1 відсутня галузь el se. Подібна конструкція називається «пропуск оператора», оскільки присвоювання або виконується, або пропускається залежно від виконання умови.

Якщо потрібно перевірити кілька умов, їх поєднують знаками логічних операцій. Наприклад, вираз в прикладі 2 буде істинно в тому випадку, якщо виконається одночасно умова а<Ь и одне з умов у дужках. Якщо опустити внутрішні дужки, буде виконано спочатку логічне И, а потім -АБО.

Оператор у прикладі 3 обчислює найменше значення із трьох змінних. Фігурні дужки в цьому випадку не обов'язкові, тому що компілятор відносить частину el se до найближчого if.

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

Донструкции, подібні до оператора в прикладі 5, простіше й наочніше записувати у вигляді умовної операції (у цьому випадку: max = (b > а) ? b : а;).

Якщо яка-небудь змінна використається тільки усередині умовного оператора, рекомендується оголосити її усередині дужок, наприклад:

If (int i = fun(t)) a -= i; else a += i:

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

___________________________________________________________________