Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Типізація даних.doc
Скачиваний:
4
Добавлен:
25.11.2018
Размер:
503.81 Кб
Скачать

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

Серед операцій, пов'язаних із типами даних існують такі, які визначені фактично для всіх типів даних. Це операції порівняння і присвоювання, тобто "перевірка рівності" (або порядку в разі впорядкованих типів) і "установка рівності". При цьому для даних, які мають великий обсяг і складну структуру, виконання цих операцій може супроводжуватися складними обчисленнями.

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

Такі перетворення можуть ініціюватися як програмістом (тобто відбуватися явно), так і системою програмування (тобто відбуватися неявним чином).

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

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

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

Також в мові програмування можуть бути задані спеціальні функції для приведення.

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

Var X: integer;

Y: real;

то оператор

Y := X+2.78;

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

X := 2.78;

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

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

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

Chr(I) - перетворює цілий тип у літерний, тобто повертає символ стандартного коду таблиці ASCII з номером, що дорівнює значенню I. Якщо значення більше 255, виникає програмне переривання. Наприклад: Chr(105); результат - 'i'.

Ord(S) - для значень літерного типу S, функція Ord повертає їх номер у відповідності з таблицею ASCII. Таким чином, літерний тип перетворюється у цілий. Наприклад: Ord('A'); результат - 65.

У мові С для явного приведення типів слід перед відповідною змінною вказати в круглих дужках ім'я нового типу:

(ім'я типу) вираз.

Наприклад:

int X;

float Y;

Y = (float)X/12;