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

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

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

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

Рік:
2011
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Структури даних та алгоритми
Група:
КІ

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ Звіт з лабораторної роботи № 2 з дисципліни: " Програмування. Частина III. Структури даних та алгоритми " "Перетворення типів даних" 1. МЕТА РОБОТИ Дослідження методів та засобів явного та неявного перетворення типів даних. 2.ПОСТАНОВКА ЗАДАЧІ Завдання 1: Визначити, які неявні перетворення типів будуть відбуватись при обчисленнях. З’ясувати, чи відбудуться втрати значимості даних. Хід міркувань підтвердити програмними результатами. В звіти пояснити кожне перетворення і метод, яким воно здійснено. wchar_t x0=0; unsigned int x1=26; unsigned long int x2=2; long double x3=3; char x4=4; unsigned long int x5=5; unsigned long int x6=6; double x7=7; unsigned int x8=8; signed long int x9=9; bool x10=10; unsigned long int x11=11; x1=x1-0xFFFFFFFA; x3='a'+x0-x2; x7=x4+x5+x6*0.1; x8=x9+x10-x11*10; Завдання 2 Визначити, які явні і неявні перетворення типів будуть відбуватись. Результати обчислень підтвердити програмними результатами. В звіти пояснити кожне перетворення і кожний отриманий результат Char v3=*(reinterpret_cast<char*> (&x)+1)+11; char *v7=reinterpret_cast<char*> (&x); short w5=*(reinterpret_cast<short*>(&y)+2)+12;short long w2=static_cast<long>(y)+55; 3.АЛГОРИТМ РОЗВ’ЯЗАННЯ ЗАДАЧІ Підключаємо бібліотеки iostream і conio для виводу на консоль і для затримки результату. Створюємо змінні різних типів і присвоюємо їм значення відповідні до варіанту. Робимо дії і присвоюємо змінним x1,x3,x7,x8 і прослідковуємо перетворення типів. Створюємо другі дві змінні x i y. Задопомогою «reinterpret_cast» змінну певно типу присвоюємо змінній іншого типу, і виводимо на консоль в шістнадцятковій десятковій формі і їхнє ANCI значення. Задопомогою функції getch() затримуємо результат на екрані. 4.СИСТЕМА ТЕСТІВ Завдання 1 x1 = x1 – 0xFFFFFFFA unsigned int x1=26; ВПК: 26 00 00 00 0xFFFFFFFA ВПК: FAFFFFFF FF FF FF FA16= -610 unsigned int x1 = x1+ (–0xFFFFFFFA)= 26+6=32 Результат: 32 x3 = ’a’ + x0 – x2 unsigned long int x2=2; ВПК: 02 00 00 00 Символьна константа 'a' - значення 9710=6116 за таблицею ASCII char −> int int-> unsigned long int ВПК: 61 −> 61 00 00 00 00 wchar_t х0=0 wchar_t −> unsigned long int Mетод: розширення знаком ВПК: 00 00 −> 00 00 00 00 x3=97+0-2=95 Результат: 95 3. x7 = x4 + x5 + x6 * 0.1 1) 0.1 – типу double ВПК: cd cc cc 3d (переведено за допомогою програми з лаб1) char x4=4 double −> int; ВПК: 04 00 −> 04 00 00 00 int −> double ВПК: 04 00 00 00 −> 00 00 80 40 (переведено за допомогою програми з лаб1) unsigned long int x5=5 а) unsigned long int −> int ВПК: 05 −> 05 00 00 00 б) int −> double ВПК: 05 00 00 00 −> 00 00 a0 40 (переведено за допомогою програми з лаб1) 4) unsigned long int x6=6 unsigned long int −> int ВПК: 06 00 00 00 −> 06 00 00 00 int −> double ВПК: 06 00 00 00 −> 00 00 c0 40 (переведено за допомогою програми з лаб1) double x7= x4 + x5 + x6 * 0.1=4+5+6*0.1=9.6 Результат: 9.6 4. x8 = x9 + x10 – x11*10 1) unsigned long int x11=11; ВПК: 0B 00 00 00 2) х9=9 a) signed long int −> int; ВПК:09 00 −> 09 00 00 00 b)int−>bool; ВПК:09 00 00 00 −> 00 00 00 00 00 00 22 40 c)bool−>long; ВПК: 09 00 00 00 00 00 00 00 3) bool x10=10; ВПК: 0A 00 00 00 00 00 00 00 Результат: char x8 = x9 + x10 – x11*10 x8=9+10-11*10=19-110= -9110=>-5B16 ВПК 5B : 5B 00 00 00 , оскільки - 5B зробивши інверсію та додавши 1 => A5 FF FF FF A5 FF FF FF16 = 429496719610 Результат: 4294967196 4.1 Представлення змінної v3 char v3=*(reinterpret_cast<char*> (&x)+1)+11; printf("%d %x %c \n", v3,v3,v3); Нехай у=*reinterpret_cast<char*> (&x) ВПК int х: 2C 09 00 00 00 char займає 1 байт, маєм що у=2016=0010 1100 , оскільки, знак “+”, отримаєм: 4410+1110=55 Відповідь: 55 37 7 55 – отриманий результат в 10-ій системі числення; 37 – отриманий результат в 16-ій системі числення (3716=5510); '7' – З таблиці ASCII під номером 5510 знаходиться символ '7' ; 4.2 Представлення змінної v7 char *v7=reinterpret_cast<char*> (&x); printf("%d %x %c \n", *v7+1,*v7+2, *v7+3); int x=026110 x = 02611016 ВПК: 48 09 00 00 Char однобайтний тип, беремо 1 байт + 1 −> 4816 = 7210=0100 1000 *v7+1 =73; - %d –в десятковій формі *v7+2 = 74; - %x – в шістнадцятко вій формі, 7410=4A16 *v7+3 = 75; - %с – в таблиці ASCII №75 це символ K Відповідь: 73 4A K 4.3 Представлення змінної w5 short w5=*(reinterpret_cast<short*>(&y)+2)+12; printf("%x %u %d \n", w5,w5,w5); double y=1126.0; short w7=*(reinterpret_cast<short*>(&y)+2)+12 y=*(reinterpret_cast<short*>(&y)+2) ВПК х: 00 00 00 00 00 98 91 40 &y +1 +2 Оскільки, short займає 2 байта, то ВПК у : 00 98 98 0016 = 1001 1000 0000 0000 00002 0110 0111 1111 1111 1111 1 0110 1000 0000 0000 0000 – приймається як знакове, в результаті отримаєм 0110 1000 0000 0000 0000 відповідно воно дорівнює -68 0016 = -2662410 -26624 +12 = -26612 Відповідь:FFFF980c 4294940684 -26612 FFFF980c – отриманий результат в 16-ій системі числення в доповняльному коді (-2661210 => -67F4, оскільки воно відємне, інвертуєм => FFFF980c 16); 4294940684 – отриманий результат в 10-ій системі числення в доповняльному коді(FFFF980c 16=429494068410); -26612– отриманий результат в 10-ій системі числення 4.4 Представлення змінної w2 long w2=static_cast<long>(y)+55 Оскільки, double- дійсне чило а long- ціле, то відкидається дробова частина: 1126.0 −> 1126 і додається 55 1126+55=1181 Відповідь: 49D  1181  1181 49D – отриманий результат в 16-ій системі числення(118110=49D16) ; 1181 – отриманий результат представляється як unsigned long, оскільки тип без знаковий а число додатнє , то залишиться таким же; 1181 – отриманий результат в 10-ій системі числення 5.Результати програми / ВИСНОВКИ Я навчився досліджувати методи явного і неявного перетворення типів даних; ДОДАТОК Лістинг програми #include <iostream> #include <conio.h> using namespace std; int main() { wchar_t x0=0; unsigned int x1=26; unsigned long int x2=2; long double x3=3; char x4=4; unsigned long int x5=5; unsigned long int x6=6; double x7=7; unsigned int x8=8; signed long int x9=9; bool x10=10; unsigned long int x11=11; x1=x1-0xFFFFFFFA; x3='a'+x0-x2; x7=x4+x5+x6*0.1; x8=x9+x10-x11*10; cout<<x1<<endl<<x3<<endl<<x7<<endl<<x8<<endl<<"************"<<endl; int x=026110; double y=11.26e+2; char v3=*(reinterpret_cast<char*> (&x)+1)+11; printf("%d %x %c \n", v3,v3,v3); char *v7=reinterpret_cast<char*> (&x); printf("%d %x %c \n", *v7+1,*v7+2, *v7+3); short w5=*(reinterpret_cast<short*>(&y)+2)+12; printf("%x %u %d \n", w5,w5,w5); long w2=static_cast<long>(y)+55; printf("%lx %lu %ld \n", w2,w2,w2); getch(); return 0; }
Антиботан аватар за замовчуванням

18.11.2012 16:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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