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