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

Перетворення типів.

Будь-який арифметичний вираз ніби х+у має тип і значення. Наприклад, якщо обидві змінні х і у одного типу (скажемо int), то х+у — теж ціле. Якщо х і у різних типів, то х+у називається змішаним виразом. Припустимо, х типу short, а у типу int. Тоді значення х буде перетворено до цілого, і вираз х+у одержить тип int. Відмітьте, що значення х в пам'яті залишається незмінним. Перетвориться тільки тимчасова копія х при обчисленні значення виразу. Тепер припустимо, що обидві змінні х і у мають тип short. Хоча х+у і не є змішаним виразом, всеодно відбудеться автоматичне перетворення; х і у будуть підвищені до int і вираз буде цілим. Загальні правила прості:

Автоматичне перетворення виразу “х операція у”

  1. Bcі bool, char, short або enum підвищуються до int. Цілі типи, які не можуть бути представлені як int, підвищуються до unsigned int.

  2. Якщо після першого кроку вираз залишається змішаним, то відповідно до ієрархії типів int < unsigned int< long <unsigned long < float < double < long double операнд нижчого типу підвищується до вищого типу, і значення виразу одержує цей тип. Відмітьте, що unsigned int підвищується до unsigned long, якщо long не може містити всі значення unsigned int.

Щоб проілюструвати неявні перетворення, ми зробимо наступні оголошення і перерахуємо різні змішані вирази разом з відповідними типами:

Оголошення: char с; long lg; double d; int i;short s; float f; unsigned u;

Вираз

Тип

Вираз

Тип

с - s / i

int

u * 3 – i

Unsigned

u * 3.0 – i

double

f * 3 – i

Float

с + 1

int

3 * s * lg

long

с + 1.

double

d + s

double

Автоматичне перетворення може відбуватися при присвоєнні. Наприклад:

d = i

переведе ціле значення i в double і потім присвоїть його d; тип всього виразу буде double. Підвищення (або розширення) типу, як у виразі d = i, зазвичай буде виконано правильно, а ось пониження (або звуження) типу, як у виразі i = d, може привести до втрати інформації. Тут дробова частина d буде відкинута. Що саме відбудеться, у кожному випадку залежить від машини.

На додаток до неявних перетворень, які можуть відбуватися при присвоєні і в змішаних виразах, існує явне перетворення, зване приведенням (cast).

Хай i — ціле, тоді

(double)i

виконає приведення значення i так, що вираз матиме тип double. Сама змінна i залишається незмінною. Приклади:

(char) (' А' +1.0)

Ось деякі приклади:

double у = i/(double) 7; //поділе з подвійною точністю

char ptr = (char)(i + 88); //ціле до значення символу

Вправа

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

int i;

char с;

i = с;

cout « i;