Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_MOVCHKO.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
190.25 Кб
Скачать

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-ма однаковими байтами СС, оскільки воно ще пусте. Виконую надання значень елементам об’єднання.

  1. 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]