Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
Курсова робота
З програмування(частина 3)
Струкури даних та алгоритми
Варіанти:
Завдання 1:
3.1: по горизонталі – 12%5 = 2
по вертикалі - 7%6 = 1
Завдання2:
3.2.1:№ = {[(7*5)%216]12+5}%30 = 5
3.2.2:№ = [(7+5)*(216+12)]%30 = 6
3.2.3:№ = (5*10+216*12)%30 = 2
3.2.4:№ = [7*3*216+(12%3)*5]%30 = 6
3.2.5:№ = (7+12+216*5+7*12)%30 = 13
Визначити внутрішнє представлення в пам’яті комп’ютера даних базових типів. Розглянути основні прості (цілі, дійсні, символьні, логічні) типи даних:
Отримані числа згідно варіанту: b, ch2, i5, d2
Визначемо числа для вище наведенних змінних:
b=(день народження * 5)%10*місяць народження = (7*5)%10*12=60
ch2 = друга літера=> Tunkalyuk=>ch2 = ‘u’=11710 = 7516 = 0111 01012
i3=день народження * 352 = 7*352 = 246410 = 9AO16 = 1001 1010 00002
d2= Z . X e + Y=(7*12).7e+12=84.7e+12(X-день народження,Y-місяць народження,Z=X*Y)
Представлення рядків символів
char *string5 = “35j\5\x4 3y\34d df\\””’4””\n”;
мій мобільний номер: 095 82 87 964
string5[0]=’5’;
string5[2]=’8’;
string5[4]=’2’;
string5[6]=’8’;
string5[8]=’7’;
string5[10]=’9’;
string5[12]=’6’;
string5[14]=’4’;
Представлення переліків
enum color6 {
BLUE, //0
GREEN, //1
CYAN = -1, //-1
RED, //0
BROWN, //1
GRAY = -2, //-2
YELLOW, //-1
WHІTE = 0, //0
MAGENTA, //1
LІGHTGRAY, //2
DARKGRAY, //3
BLACK //4
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
Представлення масивів
unsigned short array2[][4][3]
1-ий елемент масива = 0*7 = 0
2-ий елемент масива = 9*7 = 63
3-ій елемент масива = 5*7 = 35
4-ий елемент масива = 8*7 = 56
5-ий елемент масива = 2*7 = 14
6-ий елемент масива = 8*7 = 56
7-ий елемент масива = 7*7 = 49
8-ий елемент масива = 9*7 = 67
9-ий елемент масива = 6*7 = 42
10-ий елемент масива = 4*7 = 28
Представлення структур
struct str6{
unsigned long e:3; // e =3024
unsigned long :2; // 2 біта не використовується
short :2; // 2 біта не використовується
signed short d; // d = 7440
unsigned :7; // 7 біт не використовується
double a; // а = 7.84
short b:7; // b = 133920
char f; // f = 4
char c[9]; // 9 елементів по 1 байту кожен
}str;
str.a = 7,84
str.b = 133920
str.c[0] = ‘T’
str.c[1] = ‘u’
str.c[2] = ‘n’
str.c[3] = ‘k’
str.c[4] = ‘a’
str.d = 7440
str.e = 3024
str.f = 4
Представлення об’єднань
union un13{
double f[3];
float b[2];
struct {
wchar_t a[7];
int c;
};
float e;
bool g;
} un;
un.e = 84151
un.c = 11900
un.a[0] = ‘8’
un.a[1] = ‘7’
un.a[2] = ‘9’
un.a[3] = ‘6’
un.a[4] = ‘4’
Зміст
Вступ
Теоретична частина
Алгоритм розв’язання задачі.
Система тестів
Завдання 1: Внутрішні формати базових типів
3.1.1. Логічний тип
3.1.2. Символьний тип
3.1.3. Цілий тип
3.1.4. Дійсний тип
Завдання 2: Внутрішні формати похідних типів
3.2.1. Рядок символів
3.2.2. Перерахування
3.2.3. Масив
3.2.4. Структура
3.2.5. Об'єднання
Результати виконання програми
Висновки
Список літератури
Додатки
1.Теоретична частина
1. Базові типи даних
1.Символьні типи даних
Ідентифікатором символьного типу є ключове слово char.
В пам’яті комп’ютера дані символьного типу зазвичай займають 1 байт. В цей байт записується порядковий номер символа в таблиці ASCII.
Тип
Розмір пам'яті в байтах 16 (32)
Діапазон значень
[signed] char
1 (1)
-128..127
unsigned char
1 (1)
0..255
2.Логічний тип даних
В мові C++ логічний тип (bool) характеризується двома значеннями: false (0) і true (1). В пам'яті комп'ютера змінна типу bool займає 1 байт. Логічні значення можна асоціювати зі значеннями типу int: значенню false відповідає нуль, значенню true відповідають всі інші числа.
В арифметичних і логічних виразах логічні значення перетворюються в цілі числа. Арифметичні та бітові логічні операції виконуються над перетвореними величинами. Якщо результат приводиться знову до логічного типу, то 0 перетворюється в false, а ненульове значення перетворюється в true.
bool x = true; // в пам’яті комп’ютера змінна х зберігається як послідовність: 0000 0000
bool y = false; // в пам’яті комп’ютера змінна y зберігається як послідовність: 0000 0001
3.Цілочисельні типи даних
Типи short, іnt і long призначені для представлення цілих чисел.
Цілі типи можуть бути знаковими (sіgned) і беззнаковими (unsіgned). В знакових типах самий лівий біт використовується для зберігання знака числа (0 – плюс, 1 – мінус). Решта бітів містять числове значення. В беззнакових типах всі біти використаються для числового значення. За замовчуванням всі цілочисельні типи вважаються знаковими.
Тип
Розмір пам'яті
в байтах 16 (32)
Діапазон значень
[signed] short [int]
2
-215 .. 215-1 = -32768 .. 32767
unsigned short [int]
2
0 .. 216-1 = 0 .. 65535
[signed] int
2 (4)
-215 .. 215-1 (-231 .. 231-1)
unsigned [int]
2 (4)
0 .. 216-1 (0 .. 232-1)
[signed] long [int]
4
-231 .. 231-1 = -2 147 483 648 .. 2 147 483 647
unsigned long [int]
4
0 .. 232-1 = 0 .. 4 294 967 295
Від'ємне число типу [int[ в пам'яті комп’ютера зберігається в доповняльному двійковому коді і займає 4 байти.
В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа.
4. Дійсні типи даних
Дійсні константи записуються у двох формах – з фіксованою десятковою крапкою або в експонентному виді. В першому випадку крапка використовується для поділу цілої і дробової частин константи. Як ціла, так і дробова частини можуть бути відсутніми (наприклад 1.2, 0.725, 1., .35, 0.). В трьох останніх випадках відсутня або дробова, або ціла частина. Десяткова крапка повинна обов'язково бути присутньою, інакше константа буде вважатись цілою.
Експонентна форма запису дійсної константи містить знак, мантису і десятковий порядок (експоненту). Мантиса – це будь-яка додатня дійсна константа у формі з фіксованою крапкою або цілою константою.
е у випадку float = 127 ,у випадку – double = 1023, long double – 16383.
Дійсні числа зберігаються в пам'яті комп'ютера у зворотньому порядку розміщення байт числа.
Таблиця 4.7
Назва
типу
Іденти-фікатор
Діапазон значень
Внутрішній формат:
s–знак,e–експонента,m–мантиса
Значення числа
Розмір пам’яті в байтах
Дійсне одинарної точності
float
від 3.410-38
до 3.41038
1 біт 8 біт 23 біта
s
e
m
(-1)S1,m2e -127
4
Дійсне подвійної точності
double
від 1.710-308
до 1.710308
1 біт 11 біт 52 біта
s
e
m
(-1)S1,m2e –1023
8
Дійсне підвищеної точності
long double
від 3.410-4932
до 3.4104932
1 біт 15 біт 1біт 63 біта
s
e
1
m
(-1)S1,m2e -16383
10 (8)*
Зборка за схемою:
s
e
m
В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа.
2. Похідні типи даних
1 Рядок символів
2.Переліки
Змінна, котра може приймати значення з деякого списку значень, називається змінною перелічуваного типу або переліком. Оголошення переліку задає тип змінної переліку і визначає список іменованих констант, що називається списком переліку. Імена елементів списку переліку задаються в фігурних дужках через кому.
Значенням кожного імені списку є деяке ціле число. Змінна типу переліку може приймати значення однієї з іменованих констант списку. Змінні типу enum можуть використовуватись і як операнды в арифметичних операціях та в операціях відношення, і як індекси в індексних виразах.
Кожен ідентифікатор іменує елемент переліку. Всі ідентифікатори в списку переліку повинні бути унікальними і повинні відрізнятись від всіх інших ідентифікаторів в тій самій області видимості, включаючи імена звичайних змінних та ідентифікатори з інших списків переліку.
Ідентифікатор, зв'язаний з константним виразом, приймає значення, що задається цим константним виразом. Константний вираз повинен мати тип іnt і може бути як додатнім, так і від’ємним. Константні вирази можуть містити однакові значення. Наступний ідентифікатор в списку отримує значення, рівне константному виразу плюс 1, якщо цей ідентифікатор не має свого константного виразу.
3.Масив
Масив - це впорядкований скінченний набір даних одного типу, які зберігаються в послідовно розташованих комірках оперативної пам'яті і мають спільну назву. З оголошення масиву компілятор одержує інформацію про тип елементів масиву та їх кількість.
Для роботи з масивом його елементи індексуються (нумеруються), а доступ до них здійснюється за допомогою операції взяття індексу. В мові С++ індексація масивів починається з 0, тому елемент із індексом 1 насправді є другим елементом масиву, а індекс першого дорівнює 0. Індекс може бути цілим числом або цілим виразом. Якщо в якості індекса використовується вираз, то спочатку обчислюється вираз, щоб визначити конкретний елемент масиву з яким буде виконуватись робота.
Елементам масиву можна задати початкові значення (ініціалізувати їх) в оголошенні масиву за допомогою списку, що знаходиться одразу після оголошення. Список містить однакові за змістом початкові значення, розділені комами і обмежені фігурними дужками.
4.Структура
Елементи структури називаються полями структури і можуть мати будь-які типи, крім типу цієї ж структури, але можуть бути вказівниками на неї. Якщо відсутнє ім'я типу, то повинен бути заданий список оголошень перемінних, вказівників або масивів. Ім'я структури можна використовувати відразу після його оголошення (визначення можна дати пізніше) в тих випадках, коли компіляторові не потрібно знати розмір структури. Для змінних одного й того ж структурного типу визначена операція присвоювання, при цьому відбувається поелементне копіювання. Структуру можна передавати в функцію і повертати як значення функції.
поля різних структур можуть мати однакові імена, оскільки в них різна область видимості. Більше того, можна оголошувати в одній області видимості структуру та інший об'єкт (наприклад, змінну або масив) з однаковими іменами.
В пам'яті комп’ютера під кожний елемент структури виділяється визначений відповідно до типу цього елемента об’єм памяті. Елементи в пам'яті зберігаються в тому ж порядку, в якому вони були представлені в описі структури.
5.Об'єднання
Об'єднання дуже схожі на структури. Однак на відміну від структури об'єднання зберігає значення тільки одного елемента в кожний момент часу. Інакше кажучи, коли виконується операція присвоювання значення елементу об'єднання, то перезаписується будь-яке попереднє присвоювання.
Головною особливістю об'єднання є те, що для кожного з оголошених елементів виділяється та сама область пам'яті, тобто вони перекриваються. Пам'ять, що відповідає змінній типу об'єднання, визначається величиною, необхідною для розміщення найбільш довгого елемента об'єднання. Коли використовується елемент меншої довжини, то змінна типу об'єднання може містити зайву пам'ять, що не використовується. Всі елементи об'єднання зберігаються в одній і тій cамій області пам'яті, починаючи з однієї адреси.
2.Алгоритм розв’язання задачі.
1. Базові типи даних
1.1 Логічний тип (bool).
Логічний тип (bool) характеризується двома значеннями: false (0) і true (1).
До false (0) відноситься виключно „0” , а для true (1) будь-яке значення =< 1;
bool x = true // в пам’яті комп’ютера змінна х зберігається як послідовність: 0000 0000
bool y = false; // в пам’яті комп’ютера змінна y зберігається як послідовність: 0000 0001
(в 16-ковій системі числення як 00 або 01 відповідно).
1.2 Символьні типи даних.
За системою ASCII символ має порядковий номер.
Отже, цей символ в пам’яті комп’ютера буде представлений як послідовність біт цього порядкового номеру.
signed char – від -128 до 127, але тільки величини від 0 до 127 мають символьний еквівалент.Отже будемо вважати що char є символьним.
1.3 Цілочисельні типи даних.
Додатнє число типу unsigned long в пам'яті комп’ютера зберігається в прямому двійковому коді і займає 4 байти.В пам’яті комп’ютера цілі числа зберігаються у зворотному порядку розміщення байт числа.Результат записуємо в 16-ковій системі числення.
1.4. Дійсні типи даних.
В пам'яті комп’ютера зберігається додатнє число типу double з невеликою кількістю перетворень:
1.Перевід цілої частини.
2.Перевід дробової частини.
3.Нормалізація.
4.Заокруглення.
5.Визначення мантиси.
6.Визначення зміщеного порядку.
7.Визначення знакового розряду.
8.Зборка за схемою:
s
e
m
9.Запис в 16- ковій системі числення.
10.Побайтово обернути
2. Похідні типи даних
2.1 Рядок символів:
Визначити представлення в пам’яті комп’ютера рядків символів.
2.2Переліки:
Якщо якомусь індитифікатору буде явно присвоєне значення n то настопному індитифікатору буде присвоєно за замовчуванням n+1 і так буде до тих пір поки небуде наступного явного присвоювання.
2.3 Масив:
Символьний рядок:
char my[] = "Lab-1";
В пам’яті комп’ютера він зберігається в 6 байтах у такому вигляді:
0100 1100 0110 0001 0110 0010 0010 1101 0011 0001 0000 0000
my[0] = ‘L’ my[1] = ‘a’ my[2] = ‘b’ my[3] = ‘-’ my[4] = ‘1’ термінальний нуль
2.4 Структура:
1.Визначимо представлення в пам'яті комп’ютера окремо кожного поля.
а) Представлення дійсної .
б) Представлення символьного рядка.
в) Представлення структури.
г) Представлення логічної .
д) Представлення символьної змінної.
2. Виміряти розмір кожної змінної.
3. Просумувати всі поля
2.5 Об'єднання:
1.Визначимо представлення в пам'яті комп’ютера окремо кожного елемента об'єднання.
2. Визначити довжину найбільшого елемента масиву – це і буде довжина об’єднання
3. Елементи послідовно записуються один за одним, накладаючись в пам'яті.
4.Довжина об'єднання вирівнюється до довжини кратної довжині базового типу.
Cистема тестів
3.1 Завдання 1:
Визначити внутрішнє представлення в пам’яті комп’ютера даних базових типів. Розглянути основні прості (цілі, дійсні, символьні, логічні) типи даних:
b, ch2, i5, d2
bool b, unsigned char ch2, unsigned long i5, double d2
bool b
b = (7*5)%10 * 12 = 60
6010 = 3C16 b>1 -> b = true
ВПК: 0116
unsigned char ch2
ch2 = ‘u’ = 11710 = 7516 = 0111 01012
ВПК: 7516
unsigned long int i5
i5 = 246410 = 9AO16 = 1001 1010 00002
0000 0000 0000 0000 0000 1001 1010 00002
0 0 0 0 0 9 A 0
ВПК: А0 09 00 0016
double d2
d2 = 84.7e+12= 8470000000000010 ;
84700000000000.010 = 4D08C1699800.0= 0100 1101 0000 1000 1100 0001 0110 1001 1001 1000 0000 0000. 0000
Нормалізація: 1, 00 1101 0000 1000 1100 0001 0110 1001 1001 1000 0000 0000 0000 00* 10 ^101110
е = 1023 + 46 = 106910 = 42D16 = 100 0010 11012
s = 1
m=1101 1011 0010 0010 1101 0000 1110 0101 0110 0000 0100 0001 1001
S
E
M
0
100 0010 1101
0011 0100 0010 0011 0000 0101 1010 0110 0110 0000 0000 0000 0000
ВПК: 00 00 66 5A 30 42 D3 42
3.2 Завдання 2
Визначити внутрішнє представлення в пам’яті комп’ютера даних похідних типів.
3.2.1: Представлення рядків символів
Визначити представлення в пам’яті комп’ютера рядків символів.
char *string5 = “35j\5\x4 3y\34d df\\””’4””\n”;
виконаємо наступні пере присвоювання:
string5[0] = ‘5’;
string5[2] = ‘8’;
string5[4] = ‘2’;
string5[6] = ‘8’;
string5[8] = ‘7’;
string5[10] = ‘9’;
string5[12] = ‘6’;
string5[14] = ‘4’;
X
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String5[X]
3
5
j
♣
♦
(SP)
3
y
(РЗ)
d
(SP)
d
f
\
‘
4
NL
У 16 СЧ
33
35
6A
5
4
20
33
79
1C
64
20
64
66
5C
27
34
A
Примітка: (SP) – space
(РЗ) – розділювач файлів(це є недрукований символ який в таблиці ASCII знаходиться під порядковим номером 28(у десятковій системі))
NL – new line
після переприсвоювання, даний рядок набуде вигляду:
X
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String5[X]
5
5
8
♣
2
(SP)
8
Y
7
d
9
d
6
\
4
4
NL
У 16 СЧ
35
35
38
5
32
20
38
79
37
64
39
64
36
5C
34
34
A
В результаті на екрані виведеться даний рядок:
char *string5 = “558♣2 8y7d9d6\44”
ВПК: 35 35 38 05 32 20 38 79 37 64 39 36 5С 34 34 0А 0016
00 в кінці означає 0 символ(кінець рядка)
3.2.2: Представлення переліків
Визначити представлення в пам’яті комп’ютера переліків.
enum color6 {
BLUE, //0
GREEN, //1
CYAN = -1, //-1
RED, //0
BROWN, //1
GRAY = -2, //-2
YELLOW, //-1
WHІTE = 0, //0
MAGENTA, //1
LІGHTGRAY, //2
DARKGRAY, //3
BLACK //4
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
на екрані виведеться: -1, 1, 3
С1 ВПК: 00 00 00 11
11 11 11 00
+ 1
11 11 11 01
С1 ВПК: FD FF FF FF
C2 ВПК: 01 00 00 00
С3 ВПК: 03 00 00 00
3.2.3: Представлення масивів
Визначити представлення в пам’яті комп’ютера масивів.
unsigned short array2[][4][3] = {23, 4, 3, ‘4’}
оскільки всередині головних фігурних дужок знаходиться тільки один рядок =>
array2[1][4][3]
даний масив буде займати в пам’яті комп’ютера 24 байта(2*1*4*3)
масив до переприсвоювання:
23
4
3
‘4’
0
0
0
0
0
0
0
0
ВПК: 17 00 04 00 03 00 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0016
1-ий елемент масива = 0*7 = 0
2-ий елемент масива = 9*7 = 63
3-ій елемент масива = 5*7 = 35
4-ий елемент масива = 8*7 = 56
5-ий елемент масива = 2*7 = 14
6-ий елемент масива = 8*7 = 56
7-ий елемент масива = 7*7 = 49
8-ий елемент масива = 9*7 = 67
9-ий елемент масива = 6*7 = 42
10-ий елемент масива = 4*7 = 28
Масив після переприсвоювання:
array2[0][0][0]=0 array2[0][0][1]=63 array2[0][0][2]=35
array2[0][1][0]=56 array2[0][1][1]=14 array2[0][1][2]=56
array2[0][2][0]=49 array2[0][2][1]=67 array2[0][2][2]=42
array2[0][3][0]=28 array2[0][3][1]=0 array2[0][3][2]=0
0
63
35
56
14
56
49
67
42
28
0
0
ВПК в масиві записується по порядку(тобто так як елементи ідуть в таблиці)
ВПК: 00 00 3F 00 23 00 38 00 0E 00 38 00 31 00 43 00 2A 00 1C 00 00 00 00 0016
3.2.4 Представлення структур
Визначити представлення в пам’яті комп’ютера структур.
struct str6 {
unsigned long e:3; // e = 3024
unsigned long :2; // 2 біта не використовується
short :2; // 2 біта не використовується
signed short d; // d = 7440
unsigned :7; // 7 біт не використовується
double a; // а = 7.84
short b:7; // b = 133920
char f; // f = 4
char c[9]; // 9 елементів по 1 байту
}str;
str.a = 7,84; //7.8410 = 7.0D70A3D16
str.b = 133920; //13392010 = 20B2016
str.c[0] = ‘T’; //5416 = 0101 01002
str.c[1] = ‘u’; //7516 = 0111 01012
str.c[2] = ‘n’; //6E16 = 0110 11102
str.c[3] = ‘k’; //6B16 = 0110 10112
str.c[4] = ‘a’; //6116 = 0110 00012
str.d = 7440; //744010 = 1D1016
str.e = 3024; //302410 = BD016
str.f = 4;
а: 7,84 = 0111.0000 1101 0111 0000 1010 0011 11012 = 01.11 0000 1101 0111 0000 1010 0011 11012 * 10^00102
s = 0; e = 127 + 2 = 12916 = 1000 00012 ; m = 11 0000 1101 0111 0000 1010 0
a: 0100 0000 1110 0001 1010 1110 0001 01002
b: 0010 0000 1011 0010 000016
c[0]: 0101 01002
c[1]: 0111 01012
c[2]: 0110 11102
c[3]: 0110 10112
c[4]: 0110 00012
d: 0001 1101 0001 00002
e: 1011 1101 00002
f: 01002
Бітові поля показують компілятору скільки біт не використовувати
Загальна довжина структури: 4+4+4+8+8+2+1+9=40 байт
Номер байту
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
значення
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
число
unsigned long e:3
unsigned long:2
short d
Вирівнювання до unsigned
unsigned:7
Номер байту
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
значення
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
CC
число
вирівнювання до double
double a
short b:7
char f
char[0]
Номер байту
33
34
35
36
37
38
39
40
Значення
СС
СС
СС
СС
СС
СС
СС
СС
число
char[1]
char[2]
char[3]
char[4]
char[5]
char[6]
char[7]
char[8]
Структура після присвоювання:
Номер байту
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
значення
C8
CC
CC
CC
CC
CC
10
1D
CC
CC
CC
CC
CC
CC
CC
CC
число
unsigned long e:3
unsigned long:2
short d
Вирівнювання до unsigned
unsigned:7
Номер байту
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
значення
00
00
00
00
00
00
1C
40
A0
CC
04
54
75
6E
6B
61
число
double a
short b:7
char f
char[0]
char[1]
char[2]
char[3]
char[4]
Номер байту
33
34
35
36
37
38
39
40
Значення
CC
СС
СС
СС
СС
СС
СС
СС
число
char[5]
char[6]
char[7]
char[8]
Вирівнювання до загальної довжини структури
3.2.5. Представлення об'єднань
Визначити представлення в пам’яті комп’ютера об'єднань.
union un13 {
double f[3]; //24 байта
float b[2]; //8 байт
struct {
wchar_t a[7]; //14+2байт загальна довжина структури
int c; //4 байта 20 байт
};
float e; //4 байта
bool g; //1 байт
} un;
un.e = 84151 //148B716
un.c = 11900 //2Е7С16
un.a[0] = ‘8’ //3816
un.a[1] = ‘7’ //3716
un.a[2] = ‘9’ //3916
un.a[3] = ‘6’ //3616
un.a[4] = ‘4’ //3416
загальна довжина об’єднання = 24 байта(20+4=24)
ми додаємо 6 для того, щоб довжина нашого об’єднання була кратньою найбільшому базовому типу даного об’єднання.
float e
148B716 = 0001.0100 1000 1011 0111*10^100002
s=0; e = 12710+1610 =14310 = 1000 11112
m=0100 1000 1011 0111 0000 00002
число: 0 1000 1111 0100 1000 1011 0111 0000 00002
ВПК: 80 5B A4 4716
struct{
Wchar_t a[7];
int c;
};
Ця структура займає в ВПК 16+4 = 20 байт
Спочатку все заповнюється СС. Після цього ми заповнюємо масив:
a[7] ВПК: 38 00 37 00 39 00 36 00 34 00 CC CC СС СС6
останні дві пари СС – це наші вільні елементи масиву яким не було надано значень. А так як ми вирівнювали, то потрібно додати ще 2 пари СС
остаточно: а[7] ВПК 38 00 37 00 39 00 36 00 34 00 СС СС СС СС СС СС16
Змінній с надано значення 2Е7С
Отже с ВПК: 7С 2Е 00 0016
Наша структура у ВПК запишеться
ВПК: 38 00 37 00 39 00 36 00 34 00 СС СС СС СС СС СС 7С 2Е 00 0016
Отже:дій присвоєння виконуємо так як їх оголошенно після об’єднання. Тобто спочатку записуємо змінну е:
ВПК: 80 5В А4 47 СС СС СС СС СС СС СС СС СС СС СС СС СС СС СС СС СС СС СС СС16
Дальше у нас є структура.
Так як у структурі, базові типи відрізняються від попередніх, то вони будуть замінювати попередні значення -> ВПК даного об’єднання буде мати вигляд:
ВПК: 38 00 37 00 39 00 36 00 34 00 CC CC CC CC CC CC 7C 2E 00 00 CC CC CC CC16
Результати виконання программ
/
Висновок: Досліджував внутрішнє представлення в пам’яті комп’ютера базових та похідних типів даних статичної структури.
Список літератури:
Грегори К. Использование Visual С++. Специальное издание. - М.: «Диалектика», 1999.
Мешков А.В., Тихомиров Ю.В. Visual С++ и MFC. Пер. с англ. – 2-е изд. перераб. и доп. – СПб.: БХВ - Петербург, 2002. – 1040 с.
Страуструп Б. Язык программирования С++. Третье издание. - М.: «Издательство Бином», 1999.
Трамбле Ж., Соренсон П. Введение в структуры данных. – М.:Машиностроение, 1982
Уильям Топп, Уильям Форд. Структуры данных в С++. – М.:Бином, 2000 - 700 с