Назад
Вперед
Зміст
Відповідність типу змінної та типу математичного виразу
Для того, щоб вірно обирати тип змінної потрібно знати:
- який тип має вираз, який їй присвоюється
- які значення може приймати цій вираз
- які операції будут виконуватись з цією змінною
Визначення типу математичного виразу
| Змінна | = | Вираз |
| x | = | a*b+c/d-e*sqrt(f) |
Математичний вираз має дійсний тип якщо у ньому є:
- Дійсна стала (наприклад, 0.73) або
- Дійсна змінна (наприклад, float a) або
- Функція, яка має дійсний тип (sqrt, sin, cos)
В інших випадках математичний вираз має цілий тип .
Визначення типу змінної
| Змінна | = | Вираз |
| Ціла | = | Цілого типу |
| Дійсна | = | Цілого типу або дійсного типу |
- Значення виразу цілого типу можна присвоювати і змінній цілого типу і змінній дійсного типу.
- Значення виразу дійсного типу можна присвоювати тільки змінній дійсного типу.
- Якщо змінній цілого типу присвоїти значення виразу дійсного типу, то дробова частина буде відкинута.
Наприклад, після виконання такого коду:
int b, a; float c;
a = 2; c = 4.9; b = a*c;
|
змінна b набуде величини 9 після неявного перетворення дійсного числа 9.8 у ціле.
- Неможна присвоювати змінній значення, що перевищує її тип, буде дивне велике від'ємне число.
Явне перетворення типів
Явне перетворення типів задають у круглих дужках перед змінною чи виразом.
При перетворенні дійсного значення до цілого, відкидається його дробова частина
Явне перетворення типів для поданого вище прикладу опису змінних:
| Вказівка | Результат виконання |
|---|
| b = (int) c * a; | b = (int) 4.9 * 2 = 4 * 2 = 8 |
| b = (int) (c * a); | b = (int) (4.9 * 2 ) = (int) 9.8 = 9 |
Вираз може містити дані різних числових типів (змішані вирази).
Узгодження типів у виразах відбувається з урахуванням пріорітету типів:
- дійсні числа мають вищий пріоритет, ніж цілі;
- для цілих/дійсних типів вищий пріоритет там, де ширший діапазон зміни;
- результат перетворюють до типу з вищим проіоритетом.
Ще раз про операцію ділення
Результат операції / залежить від типу операндів.
Якщо обидва операнди цілого типу, то це цілочисельне ділення. Тобто 3/2=1, навіть якщо він буде присвоюватись змінній дійсного типу.
Щоб результат був 1.5 потрібно зробити хоча б один з операндів дійсного типу. Це можна зробити різними способами:
| Програма | Результат виконання |
|---|
int a=1,b=2; float c;
c=(a+b)/2; cout << c;
| 1
|
int a=1,b=2; float c;
c=(float)(a+b)/2; cout << c;
| 1.5
|
int a=1,b=2; float c;
c=(a+b)/(float)2; cout << c;
| 1.5
|
int a=1,b=2; float c;
c=(a+b)/2.0; cout << c;
| 1.5
|
int a=1,b=2; float c;
c=(a+b)*1.0/2; cout << c;
| 1.5
|
Назад
Вперед
Зміст