
- •Курсова робота ( частина і )
- •Теоретична частина
- •2.1.4. Дійсний тип
- •2.2. Завдання 2. Внутрішні формати похідних типів
- •2.2.1. Представлення рядку символів в пам’яті комп’ютера.
- •2.2.2. Представлення перерахувань в пам’яті комп’ютера.
- •2.2.3. Представлення масивів в пам’яті комп’ютера.
- •2.2.4. Представлення структур в пам’яті комп’ютера.
- •2) Unsigned b:7;
- •2.2.5. Представлення об'єднань в пам’яті комп’ютера.
- •Double e;
- •2) Unsigned long c;
- •Алгоритм розв’язання задачі
- •Результат виконання программи
2.2.5. Представлення об'єднань в пам’яті комп’ютера.
union un2 {
int b[2]; // 2*4 = 8 байт
unsigned long c; //4 байти
char a[13]; // 1*13= 13
struct {
char d[2]; // займає 1*2=2; Оскільки наступний елемент структури займає //8 байт , то відбувається вирівнювання до 8 байт
double e;// 8 байт
// сума структури 16 байт
};
} un;
un.e = 32*325 + 1994*24 = 58256;
un.c = 24*(10+59)*100 = 165600 ;
un.a[0] = ‘3’;
un.a[1] = ‘9’;
un.a[2] = ‘9’;
un.a[3] = ‘8’;
un.a[4] = ‘8’;
Найбільший елемент обєднання – структура, яка займає 16 байт. Отже, ВПК обєднання буде займати 16 байт
Байти |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Заповнення |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
Байти |
10 |
11 |
12 |
13 |
14 |
15 |
Заповнення |
CC |
CC |
CC |
CC |
CC |
CC |
На даному етапі ВПК об’єднання заповнене 20-ма однаковими байтами СС, оскільки воно ще пусте. Виконую надання значень елементам об’єднання.
Double e;
un.e =58256;
Переведем число у 16 та 2 СЧ:
5825610 = E3 9016 = 1110 0011 1001 00002
Тип double займає ВПК 8 байт (64 біт)
З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
s = 0, бо число додатне.
Нормалізуємо число:
1.110 0011 1001 00002*101111
Знайдемо експоненту е = 102310 + 1510 = 103810 = 40E16 = 100 0000 11102
Знайдемо мантису m:
Для знаходження мантиси доповнимо число 1.110 0011 1001 0000 нулями до 52 біт після коми:
m = 1100 0111 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 00002
Зборка за схемою:
1біт |
11 біт |
52 біта |
s |
e |
m |
0 |
100 0000 1110 |
1100 0111 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 00002 |
0100 0000 1110 0100 1001 1010 1110 0000 0000 0000 0000 0000 0000 0000 0000 00002 =
= 40 EC 72 00 00 00 00 0016
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу double зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК е: 00 00 00 00 00 72 EC 40
Звідси ВПК об’єднання з 0-го по 15 байт:
СС СС СС СС CC CC CC CC 00 00 00 00 00 72 EC 4016
2) Unsigned long c;
un.c = 165600 ;
Переведем число у 16 cч:
16560010 = 00 02 86 E016
Отже, ВПК с: E0 86 02 0016
Звідси ВПК об’єднання з 0-го по 15 байт:
E0 86 02 00 CC CC CC CC 00 00 00 00 00 72 EC 4016
char a[13];
a[0] = ‘3’; // ВПК: 33
Звідси ВПК об’єднання з 0-го по 15байт:
33 86 02 00 CC CC CC CC 00 00 00 00 00 72 EC 4016
a[1] = ‘9’; // ВПК: 39
Звідси ВПК об’єднання з 0-го по 15 байт:
33 39 02 00 CC CC CC CC 00 00 00 00 00 72 EC 4016
a[2] = ‘9’; // ВПК: 39
Звідси ВПК об’єднання з 0-го по 15 байт:
33 39 39 00 CC CC CC CC 00 00 00 00 00 72 EC 4016
a[3] = ‘8’; // ВПК: 38
Звідси ВПК об’єднання з 0-го по 15 байт:
33 39 39 38 CC CC CC CC 00 00 00 00 00 72 EC 4016
a[4] = ‘8’; // ВПК: 38
Звідси ВПК об’єднання з 0-го по 15 байт:
33 39 39 38 38 CC CC CC 00 00 00 00 00 72 EC 4016
Остаточне представлення об’єднання ВПК:
Байти |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Заповнення |
33 |
39 |
39 |
38 |
38 |
CC |
CC |
CC |
00 |
00 |
Байти |
10 |
11 |
12 |
13 |
14 |
15 |
Заповнення |
00 |
00 |
00 |
72 |
EC |
40 |