Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторний практикум інф сис та стр даних.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.39 Mб
Скачать

Лабораторна робота № 2 Перетворення типів даних

Мета роботи: Дослідження методів та засобів явного та неявного перетворення типів даних.

Завдання:

Завдання 2.1:

Визначити, які неявні перетворення типів будуть відбуватись при обчисленнях. З’ясувати, чи відбудуться втрати значимості даних. Хід міркувань підтвердити програмними результатами. В звіти пояснити кожне перетворення і метод, яким воно здійснено.

typedef unsigned int type_0;

typedef unsigned short int type_1;

typedef unsigned long int type_2;

typedef signed short int type_3;

typedef signed int type_4;

typedef signed long int type_5;

typedef bool type_6;

typedef char type_7;

typedef wchar_t type_8;

typedef float type_9;

typedef double type_10;

typedef long double type_11;

// позначимо через DN - день народження, MN – місяць народження

type_№ x0=0;

// замість № підставити значення: DN % 9

type_№ x1=DN;

// замість № підставити значення: DN % DN

type_№ x2=2;

// замість № підставити значення: MN % 9

type_№ x3=3;

// замість № підставити значення: MN % 13

type_№ x4=4;

// замість № підставити значення: (DN * MN) % 9

type_№ x5=5;

// замість № підставити значення: DN % 12

type_№ x6=6;

// замість № підставити значення: MN % 3

type_№ x7=7;

// замість № підставити значення: (DN * MN) % 12

type_№ x8=8;

// замість № підставити значення: DN % 13

type_№ x9=9;

// замість № підставити значення: MN % 6

type_№ x10=10;

// замість № підставити значення: (DN * MN) % 10

type_№ x11=11;

// замість № підставити значення: DN % 3

/* 1 */ x1 = x1 – 0xFFFFFFFA;

/* 2 */ x3 = ’a’ + x0 – x2;

/* 3 */ x7 = x4 + x5 + x6 * 0.1;

/* 4 */ x8 = x9 + x10 – x11*10;

Завдання 2.2:

Визначити, які явні і неявні перетворення типів будуть відбуватись. Результати обчислень підтвердити програмними результатами. В звіти пояснити кожне перетворення і кожний отриманий результат.

// позначимо через DN і MN числа, що відповідають дню і місяцю народження,

// через dn і mn – по дві цифри, що відповідають дню і місяцю народження,

// наприклад: DN=5 , MN=3 , dn=05 , mn =03

const int x_0=DN*MN*100;

// наприклад: 5*3*100=1500 => x_0=1500;

const int x_1= 0dnmn0;

// наприклад: x_1=005030;

const int x_2= 0xdnmn;

// наприклад: x_2=0x0503;

const int x_3= 0mndn0;

// наприклад: x_3=003050;

const int x_4= 0xmndn;

// наприклад: x_4=0x0305;

const double y_0=DN*MN/100;

// наприклад: 5*3/100=0.15 => y_0=0.15;

const double y_1= - DN.MN;

// наприклад: y_1=-5.3;

const double y_2= MN. DN e +2;

// наприклад: y_2=3.5e+2;

const double y_3= - DN.MN e 1;

// наприклад: y_3=-5.3e1;

const double y_4= - MN. DN e -1;

// наприклад: y_4=-3.5e-1;

int x = х_№;

// замість № підставити значення: DN % 5

double y = y_№;

// замість № підставити значення: DN % 3

char v0=*reinterpret_cast<char*> (&x) +3;

printf("%d %x %c \n", v0,v0,v0);

char v1 = static_cast< char > (x)+11;

printf("%d %x %c \n", v1,v1,v1);

char v2=*reinterpret_cast<char*> (&x) +1;

printf("%d %x %c \n", v2,v2,v2);

char v3=*(reinterpret_cast<char*> (&x)+1)+11;

printf("%d %x %c \n", v3,v3,v3);

char v4 = static_cast< char > (x)+22;

printf("%d %x %c \n", v4,v4,v4);

char v5=*reinterpret_cast<char*> (&x) +2;

printf("%d %x %c \n", v5,v5,v5);

char v6=*(reinterpret_cast<char*> (&x)+2)+22;

printf("%d %x %c \n", v6,v6,v6);

char *v7=reinterpret_cast<char*> (&x);

printf("%d %x %c \n", *v7+1,*v7+2, *v7+3);

char w0 =*(reinterpret_cast<char*>(&y)+2)+12;

printf("%x %u %d \n", w0,w0,w0);

long w1 =*reinterpret_cast<long*>(&y)+33;

printf("%lx %lu %ld \n", w1,w1,w1);

long w2=static_cast<long>(y)+55;

printf("%lx %lu %ld \n", w2,w2,w2);

short w3=*reinterpret_cast<short*>(&y) + 1;

printf("%x %u %d \n", w3,w3,w3);

short w4=*(reinterpret_cast<short*>(&y)+1)+11;

printf("%x %u %d \n", w4,w4,w4);

short w5=*(reinterpret_cast<short*>(&y)+2)+12;

printf("%x %u %d \n", w5,w5,w5);

short w6=*(reinterpret_cast<short*>(&y)+3)+13;

printf("%x %u %d \n", w6,w6,w6);

short w7=*(reinterpret_cast<short*>(&y)+2)+2;

printf("%x %u %d \n", w7,w7,w7);