Перетворення типів даних

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2009
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет «Львівська політехніка»  ЗВІТ З лабораторної роботи №3 З дисципліни: «Програмування ч.3 Структури і алгоритми» "Перетворення типів даних" Львів 2009 1. МЕТА РОБОТИ Дослідження методів та засобів явного та неявного перетворення типів даних. 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; type_2 x0=0; type_1 x1=29; type_5 x2=2; type_5 x3=3; type_1 x4=4; type_5 x5=5; type_2 x6=6; type_1 x7=7; type_3 x8=8; type_5 x9=9; type_5 x10=10; type_2 x11=11; x1 = x1 - 0xFFFFFFFA; x3 = 'a' + x0 - x2; x7 = x4 + x5 + x6 * 0.1; Завдання 2 Визначити, які явні і неявні перетворення типів будуть відбуватись. Результати обчислень підтвердити програмними результатами. В звіти пояснити кожне перетворення і кожний отриманий результат. int x = 0x0529; //х_4 = 0xmndn float y = 5. 29e+2; // y_2= MN. DN e +2 int v0=*reinterpret_cast<char*> (&x) +3; printf("%d %x %c \n", v0,v0,v0); int v5=*reinterpret_cast<char*> (&x) +2; printf("%d %x %c \n", v5,v5,v5); long w1 =*reinterpret_cast<long*>(&y)+33; printf("%lx %lu %ld \n",w1,w1,w1); long w6 =(*reinterpret_cast<short*>(&y)+3)+13; printf("%x %u %d \n",w6,w6,w6); 3. ПЕРЕТВОРЕННЯ Завдання 1: x1 = x1 - 0xFFFFFFFA; x1 приводиться в int (доповнення нулем), 0xFFFFFFFA – const int, результат приводиться з int в unsigned short int збереженням двох молодших байтів, старший біт втрачає статус знакового. x3 = 'a' + x0 - x2; ‘a’ – const char (значення 97 за таблицею ASCII) приводиться в long, x0 - unsigned long int приводиться в long старший біт стане знаковим, x2 - signed long int x3 - signed long int, типи однакові, приведення не буде. x7 = x4 + x5 + x6 * 0.1; х6 - unsigned long int, приводиться в float. 0.1 – const float, х4 - unsigned short int, приводиться в long (доповнення нулем), а потім в float, x5 - signed long int, приводиться в float. x7 - unsigned short int, резудбтат арифметичних операцій приводиться з float в long і з long в unsigned short int збереженням двох молодших байтів x8 = x9 + x10 - x11*10; x11 - unsigned long int, 10 const int приводиться в long int (доповнення нулем), старший біт втрачає статус знакового, x10 - signed long int, x9 - signed long int, x8 - signed short int, результат арифметичних операцій приводиться з signed long int в signed short int збереженням двох молодших байтів Завдання 2 int x = 0x0529; в пам’яті знаходиться значеення 29 05 00 00 int v0=*reinterpret_cast<char*> (&x) +3; *reinterpret_cast<char*> (&x) приводить значення за адресою &x з int в char і збіьлшує його на 3, тобто вибирається молодший байт 29 і збільшується на 3, отримаємо 2С, потім це значиться неявним перетворенням приводиться до типу int. int v5=*reinterpret_cast<char*> (&x) +2; Перетворення аналогічні з попереднім, тільки значення молодшого байту збільшується на 2, а не на 3 і в результаті отримаємо 2B float y = 5. 29e+2; в пам’яті знаходиться значеення 00 40 04 44 long w1 =*reinterpret_cast<long*>(&y)+33; *reinterpret_cast<long*>(&y) ) приводить значення за адресою &y з float в long і збільшу значення молодшого байта на 3310=2116, тобто в пам’яті знаходиться значеення 21 40 04 44 Що рівне числу 4404402116 float y = 5. 29e+2; в пам’яті знаходиться значеення 00 40 04 44 short w6 =(*reinterpret_cast<short*>(&y)+3)+13; (*reinterpret_cast<short*>(&y)+3) приводить значення за адресою &y з float в short і збільшу значення молодшого байта на 3. в результаті 2 молодших байта + 3 - 03 40, При виконанній наступної арифметичної операції неявним перетворенням тип short приводиться до типу int і в пам’яті має вигляд 03 40 00 00 і це значення збільшується на 1310=D16.В результаті отримаємо значення 4003 + D = 4010 4. РЕЗУЛЬТАТИ ВИКОНАННЯ ПРОГРАМИ.  5. ВИСНОВОК: я навчився використовувати засоби явного і неявного перетворення типів в мові С++. 6. ДОДАТКИ: #include <stdio.h> #include <conio.h> 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; void main(){ type_8 x0=0; type_1 x1=29; type_6 x2=2; type_6 x3=3; type_3 x4=4; type_5 x5=5; type_0 x6=6; type_6 x7=7; type_4 x8=8; type_0 x9=9; type_2 x10=10; type_2 x11=11; x1 = x1 - 0xFFFFFFFA; x3 = 'a' + x0 - x2; x7 = x4 + x5 + x6 * 0.1; x8 = x9 + x10 - x11*10; printf ("x1 = %u\nx3 = %d\nx7 = %c\nx8 = %c\n\n",x1,x3,x7,x8); int x = 0x0529; float y = 5.29e+2; int v1 = static_cast< char > (x)+11; printf("%d %x %c \n", v1,v1,v1); int v6=*(reinterpret_cast<char*> (&x)+2)+22; printf("%d %x %c \n", v6,v6,v6); long w2=static_cast<long>(y)+55; printf("%lx %lu %ld \n", w2,w2,w2); short w7=*(reinterpret_cast<short*>(&y)+2)+2; printf("%x %u %d \n", w7,w7,w7); }
Антиботан аватар за замовчуванням

24.03.2013 13:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!