Міністерство освіти і науки, молоді та спорту України
Національний університет „Львівська політехніка”
Звіт
з лабораторної роботи № 1
з дисципліни: “Програмування (частина 3)”
на тему: “ Структури даних та алгоритми ”
Варіант [2,1] (b,ch2,i6,d1)
Мета роботи: Дослідження внутрішнього представлення в пам’яті комп’ютера базових типів даних статичної структури.
Постановка задачі: Я дослідив внутрішнє представлення в пам’яті базових типів данних таких як: bool, wchar_t, unsigned short, float статистичної структури.
Алгоритм розв’язання задачі:
#include<stdio.h>
#include<conio.h>
int main (void)
{
bool b=true;
unsigned char *vb=(unsigned char *)(&b);
for (int i=0;i<sizeof(b);i++)
printf("%02X ",vb[i]);
printf("\n");
wchar_t ch2='s';
int i6=-26*352;
double d1=-26*5.26e+5;
unsigned char *vch4=(unsigned char *)(&ch2);
for (int i=0;i<sizeof(ch2);i++)
printf("%02X ",vch4[i]);
printf("\n");
unsigned char *vi6=(unsigned char *)(&i6);
for (int i=0;i<sizeof(i6);i++)
printf("%02X ",vi6[i]);
printf("\n");
unsigned char *vd1=(unsigned char *)(&d1);
for (int i=0;i<sizeof(d1);i++)
printf("%02X ",vd1[i]);
printf("\n");
getch();
return 0;
}
Система тестів:
В чому полягає суть концепції типів даних?
Згідно з концепцією типів даних, кожний тип даних однозначно визначає:
множину значень, які може приймати змінна заданого типу;
операції та функції, які можна застосовувати до цієї змінної;
внутрішнє представлення змінної у пам'яті комп'ютера.
Які категорії типів даних існують в мові С++?
В мові С++ розрізняють наступні категорії типів:
базові (або прості, основні, стандартні) типи даних;
похідні (або складні, складені) типи даних.
Які типи даних відносяться до базових типів даних?
До базових типів відносяться: скалярні типи і порожній тип (void).
Які типи даних відносяться до скалярних похідних типів?
До скалярних похідних типів належать:
перерахування (enum — enumeration) — множина поіменованих цілих значень;
вказівники (ім'я_типу *);
посилання (ім'я_типу &).
Які типи даних відносяться до структурованих похідних типів?
Структурні типи:
масиви (тип_елементу ім'я_масиву[число_елементів]);
структури (struct);
об'єднання (union),
класи (class).
Які дійсні типи даних існують в мові С++?
До дійсних належать float та double. Double у 2 рази більший. У пам'яті представляється мантисою і порядком, старший біт також є знаковим. Для них немає unsigned.
В яких типах даних можуть використовуватись бітові поля?
Тип бітового поля може бути int, signed або unsigned.
Які специфікатори типів існують в мові С++?
Специфікатори short (короткий) і long (довгий) застосовуються до цілих. У таких оголошеннях слово int можна опускати, що зазвичай й робиться. Найчастіше для представлення цілого, описаного з специфікатором short, виділяється 16 біт, із специфікатором long - 32 біта, а значенню типу int - або 16, або 32 біта.
Специфікатори signed (зі знаком) або unsigned (без знака) можна застосовувати до будь-якому цілочисельного типу. Вони вказують, як інтерпретується нульовий біт змінної, тобто, якщо зазначено ключове слово unsigned, то нульовий біт інтерпретується як частина числа, у противному випадку нульовий біт інтерпретується як знаковий. У випадку відсутності ключового слова unsigned змінна вважається знаковою.
Яким має бути специфікатор типу для представлення символів українського алфавіту?
Для представлення символів українського алфавіту, специфікатор типу даних повинен мати вигляд unsigned char, тому що коди українських літер перевищують величину 127.
Як зберігаються в пам’яті комп’ютера дані логічного типу?
В пам'яті комп'ютера змінна типу bool займає 1 байт. Логічні значення можна асоціювати зі значеннями типу int: значенню false відповідає нуль, значенню true відповідають всі інші числа.
Приклад 1.
bool x = true; // в пам’яті комп’ютера змінна х зберігається як послідовність: 0000 0000
bool y = false; // в пам’яті комп’ютера змінна y зберігається як послідовність: 0000 0001
Як зберігаються в пам’яті комп’ютера дані символьного типу?
Символьні константи (символьні літерали) можна представляти як:
клавіатурні: '1','s','Y' – записуються як символи в одинарних лапках;
- кодові: '\n','\\','\?', які використовуються для представлення деяких керуючих символів та символів-розділювачів – записуються як escape-послідовності (вони починаються з символу зворотної косої риски).
В пам’яті комп’ютера дані символьного типу зазвичай займають 1 байт. В цей байт записується порядковий номер символа в таблиці ASCII.
Приклад 2.
За системою ASCII символ ’O’ має порядковий номер 7910 = 4F16 = 10011112
Отже, цей символ в пам’яті комп’ютера буде представлений як послідовність 0100 1111.
Як зберігаються в пам’яті комп’ютера дані цілого типу?
Внутрішнє представлення змінної цілого типу — ціле число у двійковому коді. Згідно формату IEEE всі додатні цілі числа зберігаються в пам'яті комп'ютера в прямому коді, а всі від'ємні – в доповняльному коді. Цілі числа зберігаються в пам'яті комп'ютера у зворотньому порядку розміщення байт числа.
Як зберігаються в пам’яті комп’ютера дані дійсного типу?
У мові С++ дійсні типи або типи з рухомою комою представляються трьома розмірами, що характеризують точність представлення дійсних чисел:
float – одиничної точності;
double - подвійної точності;
long double – розширеної точності (у деяких реалізаціях тип long double може бути відсутній)
В пам'яті комп'ютера змінна типу float займає 4 байти, в яких один біт виділяється під знак, 8 – під порядок, 23 – під мантису.
Розряди мантиси включають один розряд цілої частини, що завжди дорівнює одиниці, і фіксовану кількість розрядів дробової частини. Оскільки старший двійковий розряд мантиси завжди дорівнює одиниці, зберігати його необов'язково, і у двійковому коді він відсутній. Фактично двійковий код зберігає тільки розряди дробової частини мантиси. Отже, насправді, у типу float мантиса містить 24 розряди, але старший розряд завжди дорівнює одиниці, тому зберігати його не потрібно.
Тип double займає 8 байт, у яких один розряд виділяється під знак, 11 – під порядок, 52 – під мантису. Насправді в мантисі 53 розряди, але старший завжди дорівнює одиниці і тому не зберігається.
Тип long double займає 10 байт (або 8 байт), в яких один розряд виділяється під знак, 15 – під порядок, інші 64 – під мантису. Записуються всі 64 розряди мантиси разом зі старшою одиницею.
Оскільки порядок може бути додатній і від'ємний, у двійковому коді він зберігається в зміщеному виді: до нього додається константа, яка рівна абсолютній величині максимального по модулю від'ємного порядку. У випадку типу float вона дорівнює 127, у випадку double – 1023, long double – 16383. Таким чином, максимальний по модулю від'ємний порядок представляється нульовим кодом.
Дійсні числа зберігаються в пам'яті комп'ютера у зворотньому порядку розміщення байт числа.
КОНТРОЛЬНІ ЗАВДАННЯ
2-ва система числення
8-ва система числ.
10-ва система числ.
16-ва система числ.
1110000
160
112
70
-11111010
-372
-250
-FA
1010011110.1101100
1236.663146
670,85
29E.D9
1110010
162
114
72
Тип
даних
Значення
Представлення в пам’яті комп’ютера
(результат записати в 16-й системі числення)
1 байт
2 байт
3 байт
4 байт
bool
3*a-3*b
(якщo a=true, b=false)
03
char
'\142'
62
wchar_t
'\X41'
31
34
int
-14810 = -9416
6C
FF
FF
FF
float
2670,0510 =A6E,0(C)16
CD
E0
26
45
Результати виконання програми
Висновок
Я дослідив внутрішнє представлення в пам’яті базових типів данних таких як: bool, wchar_t, unsigned short, float статистичної структури.