Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
програмування 2 лаба.doc
Скачиваний:
2
Добавлен:
21.11.2019
Размер:
212.99 Кб
Скачать

Міністерство освіти і науки, молоді та спорту України

Національний університет “Львівська політехніка”

Кафедра ЕОМ

Звіт

з лабораторної роботи № 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

  1. unsigned short x2 = 00;

ВПК(short):00 00

ВПК(int):00 00 00 00

Згідно правил неявного перетворення:

Число х2 в типі int: 010

  1. bool x4 = 11 % 3 * 10; // 2 * 10 = 20

x4 = 14;

ВПК(bool): 14

ВПК(int):14 00 00 00

Число х4 в типі int: 2010

  1. 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

  1. unsigned short x2 = 00;

ВПК(short):00 00

ВПК(int):00 00 00 00

Згідно правил неявного перетворення:

Число х2 в типі int:010

  1. short x3 = 89 - 110;

Згідно правил неявного перетворення

Число х3 в типі int: -2110