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

2.2.4. Представлення структур в пам’яті комп’ютера.

struct str23 {

unsigned b:7; // Займає ВПК 7 біт

// Оскільки далі нема бітового поля, то незаповнені байти

// заповняться з 10 біт до 4 байт, оскільки тип unsigned у ВПК займає 4 байти.

char c[6]; //// Займає ВПК 1*6=6 байт

unsigned char :5; //Займає ВПК 5 біт; заповняються до 1 байта

//оскільки сума попередніх байт не ділиться націло на 4 байти(unsigned)

// то відбудеться вирівнювання на один байт, до 12 байт;

unsigned e : 3; // займає ВПК 3 біти

//Оскільки нема далі бітового поля , то незаповнені байти заповняються до 4 байт;

char f; // 1 байт

//вирівнювання відбувається ще на 3 байти;

long d;//4 байти

long double a; // 8 байт

}str;

Для кожного варіанту виконати надання значень елементам структури :

str.a = 24.240;

str.b = 59 * 32 * 124 = 234112 ;

str.c[0] = ‘M’;

str.c[1] = ‘o’;

str.c[2] = ‘v’;

str.c[3] = ‘c’;

str.c[4] = ‘h’;

str.d = 764*59*2 = 90152;

str.e = 24*10*36 = 8640;

str.f = '8';

Отже , структури буде займати 32 байти.

Номер байту

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Значення

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

Число

unsigned b:7

c[0]

c[1]

c[2]

c[3]

c[4]

c[5]

unsigned char :5

Вирівювання

unsigned e : 3

Номер байту

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Значення

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

Число

char f

Вирівнюван

ня

long d

long double a

На даному етапі ВПК структури заповнене 32-ма однаковими байтами СС, оскільки вона ще пуста. Виконую надання значень елементам структури.

  1. long double a = 24,240;

str.a = 24.240;

Переведем число у 16 та 2 СЧ:

2410 = 1816 = 0001 10002

0,240*16=3.84; 0.84*16=13.44; 0.44*16= 7.04; 0.04*16=0.64; 0.64*16=10.24;

0.24*16= 3.84; 0.84*16= 13.44; 0.44*16= 7.04; 0.04*16=0.64; 0.64*16=10.24;

24.24010 = 18,3D70A3D716= 0001 1000. 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 0011 11012

Тип long double займає ВПК 8 байт (64 біт)

З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.

Необхідно визначити значення m (мантиса), s(знак) та e(експонента).

s = 0, бо число додатне.

Нормалізуємо число:

0001. 1000 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 0011 11012* 100100

Знайдемо експоненту е = 102310 + 410 = 102710 = 40316 = 0100 0000 00112

Знайдемо мантису m:

m = 1000 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 0011 11012

Зборка за схемою:

1біт

11 біт

52 біта

s

e

m

0

100 0000 0011

1000 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 0011 11012

0100 0000 0011 1000 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 0011 11012 = 40 38 3D 70 A3 D7 0A 3D 16

Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу long double зберігаються у зворотньому порядку розміщення байт числа.

Отже, ВПК - 3D 0A D7 A3 70 3D 38 4016

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