Автор: Пользователь скрыл имя, 24 Мая 2013 в 21:41, курсовая работа
Виконуючи цю курсову роботу автор повторив, як визначити внутрішнє представлення цілих, дійсних, логічних та символьних чисел в пам’яті комп’ютера. Також вивчив багато нового про представлення в пам’яті комп’ютера рядків символів, перерахувань, масивів, структур та об’єднань.
Отже в результаті переприсвоєння рядок набуває наступного вигляду:
char *string26 = "6\336\\0v5\\3n2\n5795n";
Отже ВПК рядок символів – "6\336\\0v5\\3n2\n5795n":
36 1B 36 5C 30 76 35 5C 33 6E 32 0A 35 37 39 5C 6A16 + термінальний нуль 0016
ВПК(string18): 36 1B 36 5C 30 76 35 5C 33 6E 32 0A 35 37 39 5C 6A16 + термінальний нуль 0016
2.2.2. Представлення перерахувань в пам’яті комп’ютера.
enum color12 {
BLUE, // 0, бо не визначено (немає присвоєння значення змінній BLUE)
GREEN, // 1, (оскільки невизначено, то GREEN = BLUE + 1)
CYAN = 0, // 0, бо вказано (змінній CYAN присвоєно значення 0)
RED, // 1, (оскільки невизначено, то RED = CYAN + 1)
BROWN, // 2, (оскільки невизначено, то BROWN = RED + 1)
GRAY, // 3, (оскільки невизначено. то змінній GRAY = BROWN +1)
YELLOW = 8, // 8, бо вказано (змінній YELLOW присвоєно значення 8)
WHІTE, // 9, (оскільки невизначено, то WHITE = YELLOW + 1)
MAGENTA, // 10, (оскільки невизначено, то MAGENTA = WHITE + 1)
LІGHTGRAY, // 11, (оскільки невизначено, то LIGHTGRAY = MAGENTA + 1)
DARKGRAY, // 12, (оскільки невизначено, то DARKGRAY=LIGHGRAY+1)
BLACK // 13, (оскільки невизначено, то BLACK = DARKGRAY + 1)
}
c1= CYAN, // c1 = CYAN = 0;
c2= BROWN, // c2 = BROWN = 2;
c3= DARKGRAY; // c3 = DARKGRAY = 12;
ВПК c1: 00 00 00 0016
ВПК c2: 02 00 00 0016
ВПК c3: 0C 00 00 0016
2.2.3. Представлення масивів в пам’яті комп’ютера.
char array25[][4][3] = {{6,74,5,{}}}
Оскільки всередині головних фігурних дужок знаходиться 1 пара другорядних дужок, тому розмірність масиву array25[1][4][3]. І тому розмірність масиву 1*4*3=12.
6 |
74 |
5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Його ще можна записати у такому вигляді
{{{{6},{74},{5}},{{0},{0},{0}}
Виконуємо переприсвоєння:
1-ий елемент масиву = 0*21 = 0;
2-ий елемент масиву = 6*21 = 126;
3-ий елемент масиву = 6*21 = 126;
4-ий елемент масиву = 6*21 = 126;
5-ий елемент масиву = 0*21 = 0;
6-ий елемент масиву = 5*21 = 105;
7-ий елемент масиву = 3*21 = 61 ;
8-ий елемент масиву = 2*21 = 42;
9-ий елемент масиву = 5*21 = 105;
10-й елемент масиву = 9*21 = 189;
{{{{0},{126},{126}},{{126},{0}
0 |
126 |
126 |
126 |
0 |
105 |
61 |
42 |
105 |
189 |
0 |
0 |
У 16 системі числення:
00 |
7E |
7E |
7E |
00 |
69 |
3D |
2A |
69 |
BD |
00 |
00 |
Оскільки тип масиву char, то і тип усіх елементів масиву також char, розмір якого 1 байт.
Отже, ВПК16 = 00 7E 7E 7E 00 69 3D 2A 69 BD 00 00
2.2.4. Представлення структур в пам’яті комп’ютера.
struct str25 {
int b :4; // Займає ВПК 4 біт
// Оскільки далі нема бітового поля, то незаповнені байти
// заповняться з 4 біт до 4 байт оскільки тип int у ВПК займає 4 байти.
long d; // Займає ВПК 4 байт
char c[9]; // Займає ВПК 1*9= 9 байт
// через те що сума байт
// дорівнює 17, а це число не ділиться націло на кількість байт типу unsigned, що йде
//далі, який у ВПК займає 4 байти тому відбувається вирівнювання до 20 байт
unsigned :0; // Займає ВПК 0 біт
unsigned long e:13; // Займає ВПК 13 біт
// Оскільки далі нема бітового поля, то незаповнені байти
// заповняться з 13 біт до 4 байт оскільки тип unsigned long у ВПК займає 4 байти.
long double a; // Займає ВПК 8 байт
char f ; // Займає ВПК 1 байт
// дорівнює 33 а це число не ділиться націло на кількість байт типу long double,
// який у ВПК займає 8 байт, тому відбувається вирівнювання до 40 байт.
}str;
Загальний розмір структури дорівнює 4+4+9+3+4+8+1+7= 40 байт.
Номер байту |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
Значення |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
Число |
int b :4 |
long d |
c[0] |
c[1] |
c[2] |
c[3] |
c[4] |
c[5] |
c[6] |
c[7] |
c[8] |
Вирівнювння |
Номер байту |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | |
Значення |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC | |
Число |
unsigned long e:13 |
long double a |
char f |
Вирівнювання |
На даному етапі ВПК структури заповнене 40-ма однаковими байтами СС, оскільки вона ще порожня. Виконую надання значень елементам структури.
str.a = 21,105;
Переведем число у 16 та 2 СЧ:
2110 = 1516 = 0001 01012
0,10510=0,1(AE147)16= 0, 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 01112
21,10510 = 15,1(AE147)16= 1 0101, 0001 1010 1110 0001 0100 0111 1010 1110 0001 01002
Тип long double займає ВПК 8 байт (64 біт).
З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
s = 0, бо число додатне.
1 0101, 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10102
Нормалізуємо число:
1, 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10102* 100100
Заокруглення:
1, 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1010│1110
+
1, 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1011
Знайдемо експоненту е = 102310 + 410 = 102710 = 40316 = 0100 0000 00112
Знайдемо мантису m:
m = 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10112
Зборка за схемою:
1біт |
11 біт |
52 біта |
s |
e |
m |
0 |
100 0000 0011 |
0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1011 |
0100 0000 0011 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10102 = =40 35 1A E1 47 AE 14 7B16
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу float зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК - 7B 14 AE 47 E1 1A 35 4016
str.b = 3224;
322410 = C9816=1100 1001 10002
Під тип int зарезервовано 4 байти структури, але з цих 4-х байт заповнюються тільки 4 молодших біта змінної b.
str.b = 1100 1001 10002
4 молодших біти str.b: 10002
Змінна b до присвоєння: 1100 1100 1100 1100 1100 1100 1100 11002 (СС СС CC CC16)
Змінна b після присвоєння: 1100 1100 1100 1100 1100 1100 1100 1000 2
ВПК b: 1100 1000 1100 1100 1100 1100 1100 11002
ВПК b: C8 СС CC CC16
str.c[0] = ‘G’ = 4716;
str.c[1] = ‘a’ = 6116;
str.c[2] = ‘z’ = 7A16;
str.c[3] = ‘d’ = 6416;
str.c[4] = ‘a’ = 6116;
Решта вільних елементів масиву будуть заповнені числом СС16
ВПК масиву: 47 61 7A 64 61 CC CC CC CC16
4) long d;
str.d = 0;
010=016
Під тип unsigned long зарезервовано 4 байти структури.
ВПК (str.d): 00 00 00 0016
5) unsigned long e:13;
str.e = 3780;
378010 = EC416 = 1110 1100 01002
13 молодших біти str.e: 1110 1100 01002
Змінна e до присвоєння: 1100 1100 1100 1100 1100 1100 1100 11002 (СС СС СС СС16)
Змінна e після присвоєння: 1100 1100 1100 1100 1100 1110 1100 01002
ВПК (str.e): C4 CE CC CС16
6) char f;
str.f = ‘9’;
ASCII код цифри 9 - це 3916 .Оскільки тип char, як правило, займає 1 байт пам'яті, це означає що змінна f буде мати значення 3916.
ВПК (str.f): 3916
Тепер ми маємо остаточне
представлення структури в пам’
Номер байту |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
Значення |
C8 |
CC |
CC |
CC |
00 |
00 |
00 |
00 |
47 |
61 |
7A |
64 |
61 |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
Число |
int b :4 |
long d |
c[0] |
c[1] |
c[2] |
c[3] |
c[4] |
c[5] |
c[6] |
c[7] |
c[8] |
Вирівнювння |
Номер байту |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | |
Значення |
C4 |
CC |
CC |
CC |
7B |
14 |
AE |
47 |
E1 |
1A |
35 |
40 |
39 |
CC |
CC |
CC |
CC |
CC |
CC |
CC | |
Число |
unsigned long e:13 |
long double a |
char f |
Вирівнювання |
Отже у ВПК ця структура представлена: C8 СС CC CC 00 00 00 00 47 61 7A 64 61 CC CC CC CC CC CC CC C4 CE CC CС 7B 14 AE 47 E1 1A 35 40 39 CC CC CC CC CC CC CC 16
2.2.5. Представлення об'єднань в пам’яті комп’ютера.
union un7 {
int b;
struct {
float f[2]; // Займає ВПК 2*4=8 байти
wchar_t a[6]; // Займає ВПК 6*2=12 байт
};
struct {
char d[5];
// Займає ВПК 5*1=5 байт
float e; // Займає ВПК 4 байти
};
int c;
} un;
//Максимальний елемент об’єднання - 20 байт //(кратне 4, тому вирівнювання не відбувається)
un.e = 42199;
un.c =65100 ;
un.a[0] = ‘5’;
un.a[1] = ‘3’;
un.a[2] = ‘2’;
un.a[3] = ‘5’;
un.a[4] = ‘9’;
Обє’днання складається з 4-х елементів, максимальний з яких займає 20 байт
Байти |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Заповнення |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
Информация о работе Представлення статичних данних в пам’яті комп’ютера