Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 2
на тему:
"Перетворення типів даних "
з дисципліни:
" Програмування. Частина III. Структури даних та алгоритми "
Вибір індивідуального завдання:
RN = 1994
MN = 810
DN = 1110
mn = 108
dn = 138
Pr1 = №(Y) = 89
рr2 = №(u) = 117
рr3 = №(r) = 114
Виконав:
ст. гр. КІ-22
Юрчишин В.О.
Перевірив:
ст. викл. каф.ЕОМ
Матвейчук Т.А.
Львів – 2012
1. Мета роботи: Дослідження методів та засобів явного і неявного перетворення типів даних.
2. Постановка задачі:
Завдання 1. Неявні перетворення типів даних
char x0 = 0x1994-10;
float x1;
unsigned short x2 = 0(8%8);
short x3= 89 - 110;
bool x4 = 11 % 3 * 10;
x1 = x0 +x2 + x4+ 0x123;
x2 = x2+x3- 0123;
x3 = x1+x2 * 0.123 + ’1’;
Завдання 2. Явні перетворення типів даних
const int x_0=11*8*100;
const int x_1= 013100;
const int x_2= 0x1310;
const int x_3= 010130;
const int x_4= 0x1013;
const double y_0=11*8/100;
const double y_1= - 11.8;
const double y_2= 8.11e+2;
const double y_3= - 11.8e1; // - 11.8e1 = - 118 => y_3= -118
const double y_4= - 8.11e-1;
int x = х_1;
double y = y_3; // y = - 118;
float v1 = static_cast< float > (x);
char v2 = static_cast<char> (x);
float v3=*reinterpret_cast<float*> (&x)+1;
char v4=*(reinterpret_cast<char*> (&x)+2)+3;
int w1 =static_cast<int>(y)+0X0E2;
long w2 =*reinterpret_cast<long*>(&y)+1;
short w3=*(reinterpret_cast<short*>(&y)+2);
char w4 =*(reinterpret_cast<char*>(&y)+7)+3;
3. Система тестів:
1. Неявні перетворення типів даних:
x1 = x0 +x2 + x4+ 0x123;
x2 = x2+x3- 0123;
x3 = x1+x2 * 0.123 + ’1’;
2. Явні перетворення типів даних:
1) float v1 = static_cast<float> (x);
2) char v2 = static_cast<char> (x);
3) float v3 =*reinterpret_cast<float*> (&x)+1;
4) char v4 =*(reinterpret_cast<char*> (&x)+2)+3;
5) int w1 =static_cast<int>(y)+0X0E2;
6) long w2 =*reinterpret_cast<long*>(&y)+1;
7) short w3 =*(reinterpret_cast<short*>(&y)+2);
8) char w4 =*(reinterpret_cast<char*>(&y)+7)+3;
Завдання 1.1
char x0 = 0x1994 - 10;
float x1;
unsigned short x2 = 00;
short x3= 89 - 110;
bool x4 = 11 % 3 * 10;
Обчислимо значення виразу: x1 = x0 +x2 + x4 + 0х123;
Оскільки в арифметичному виразі х1 в нас є операнди різного типу, то згідно правил неявного перетворення типів всі типи переводяться до типу операнда розмір якого є найбільшим.
0x123 – це константа, а константи в мові С++ зберігаються в типі int. Отже, в даному виразі int є операнд найбільшого розміру, тому x0(char), x2(unsigned short) та x4(bool) будуть неявно переведені до типу int.
Результуючим типом буде тип об’єкта якому присвоюється значення, тому після виконання операцій, які знаходяться ліворуч від символа присвоєння результат їхнього типу буде переведено в тип операнда якому присвоюється значення, а саме float(x1).
char x0 = 0x1994 - 10; // Переводимо в тип int вираз, що знаходиться праворуч, а потім результат в тип char
Для виразу (0x1994 – 10):
199416 - 1010= 654810 - 1010= 653810
Число: 653810= 00 00 19 8A16
ВПК(int): 8A 19 00 00
Результат присвоюється змінній х0, яка є типу char, а отже займає 1 байт в ВПК:
ВПК(char): 8A
Змінна х0 переведена в тип int:
ВПК(int): 8A FF FF FF
FFFFFF 8A16 = 1111 1111 1111 1111 1111 1111 1000 10102
1111 1111 1111 1111 1111 1111 1000 1010 – доповняльний
0000 0000 0000 0000 0000 0000 0111 0101 – обернений
1
0000 0000 0000 0000 0000 0000 0111 0110 – прямий
Модуль числа: 00 00 00 7616 = 11810
Число х0 в типі int: -11810
unsigned short x2 = 00;
ВПК(short):00 00
ВПК(int):00 00 00 00
Згідно правил неявного перетворення:
Число х2 в типі int: 010
bool x4 = 11 % 3 * 10; // 2 * 10 = 20
x4 = 14;
ВПК(bool): 14
ВПК(int):14 00 00 00
Число х4 в типі int: 2010
0x123 = 12316 = 29110
Обчислюємо значення виразу:
x1 = x0 + x2 + x4 + 0x123
x0 + x2 + x4 + 0x123 = -118 + 0 + 20 + 291 = 193
Відповідь: x1 = 193.0
Завдання 1.2
unsigned short x2 = 00;
short x3= 89 - 110;
Обчислимо значення виразу: x2 = x2 + x3 - 0123;
В виразі праворуч типу операнда розмір якого найбільший є int(константа 0123), тому x2 та x3 будуть переведені до int. Результат обчислення буде переведено до операнду якому присвоюється вираз, а саме unsigned short
unsigned short x2 = 00;
ВПК(short):00 00
ВПК(int):00 00 00 00
Згідно правил неявного перетворення:
Число х2 в типі int:010
short x3 = 89 - 110;
Згідно правил неявного перетворення
Число х3 в типі int: -2110