DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти та науки України Національний університет «Львівська політехніка»  ЗВІТ З лабораторної роботи №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:58

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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