- •Конспект студента. Коротка хронологія найважливіших етапів розвитку мови :
- •Алфавіт мови.
- •Ідентифікатори
- •Ключові слова
- •Управляючі послідовності
- •Концепція типу даних
- •Основні типи даних
- •Діапазони значень простих типів даних для ibm pc
- •Символьний тип (char)
- •Розширений символьний тип (wchar_t)
- •Логічний тип (bool)
- •Змінні. Клас пам'яті.
- •Типи з плаваючою крапкою (float, double і long double)
- •Перетворення типів.
- •Структура програми
- •Проста програма
- •Змінні і вирази
- •Область дії ідентифікатора
- •Вирази.
- •Порядок обчислення виразів
- •Бітові операції.
- •Введення і виведення даних.
- •Стежте за помилками переповнювання
- •Стежте за помилками неспівпадання типів
- •Читання символьних даних
- •Читання слів з клавіатури
- •Форматування введення-виведення засобами мови с Функція printf()
- •Функція scanf()
- •If (вираз) оператор 1; [else оператор 2;]
Перетворення типів.
Будь-який арифметичний вираз ніби х+у має тип і значення. Наприклад, якщо обидві змінні х і у одного типу (скажемо int), то х+у — теж ціле. Якщо х і у різних типів, то х+у називається змішаним виразом. Припустимо, х типу short, а у типу int. Тоді значення х буде перетворено до цілого, і вираз х+у одержить тип int. Відмітьте, що значення х в пам'яті залишається незмінним. Перетвориться тільки тимчасова копія х при обчисленні значення виразу. Тепер припустимо, що обидві змінні х і у мають тип short. Хоча х+у і не є змішаним виразом, всеодно відбудеться автоматичне перетворення; х і у будуть підвищені до int і вираз буде цілим. Загальні правила прості:
Автоматичне перетворення виразу “х операція у”
Bcі bool, char, short або enum підвищуються до int. Цілі типи, які не можуть бути представлені як int, підвищуються до unsigned int.
Якщо після першого кроку вираз залишається змішаним, то відповідно до ієрархії типів 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;
