Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

E 31 0A 37 61 32 63 38 65 36 6E 34 63 37 23 00




Вступ

Дана курсова робота полягає у вивченні представлення в мові програмування С++ різних типів даних, як простих (логічний, символьний, дійсні, цілі), так і похідних(структури, масиви, перерахування, об’єднання)

Знати про структури даних важливо, оскільки від правильного вибору структур, на яких буде реалізуватися програмний продукт, залежить ефективність роботи програми. В цій роботі й буде продемонстровано, як саме різні типи даних зберігаються в комп’ютері.


1. Теоретична частина

1.1 Базові типи даних

1.1.1 Логічний тип даних

В мові C++ логічний тип (bool) характеризується двома значеннями: false (0) і true (1). В пам'яті комп'ютера змінна типу bool займає 1 байт. Логічні значення можна асоціювати зі значеннями типу int: значенню false відповідає нуль, значенню true відповідають всі інші числа.В арифметичних і логічних виразах логічні значення перетворюються в цілі числа. Арифметичні та бітові логічні операції виконуються над перетвореними величинами. Якщо результат приводиться знову до логічного типу, то 0 перетворюється в false, а ненульове значення перетворюється в true.

 

1.1.2 Символьні типи даних

Ідентифікатором символьного типу є ключове слово char. Символьні константи (символьні літерали) можна представляти як клавіатурні, кодові, кодові числові. Значеннями змінних типу char є множина символів таблиці ASCII. Код символу - це його порядковий номер у таблиці символів ASCІІ.

В пам’яті комп’ютера дані символьного типу зазвичай займають 1 байт. В цей байт записується порядковий номер символа в таблиці ASCII.

Символьна константа може мати префікс L (наприклад, L'a'), який означає спеціальний розширений символьний тип (wchar_t), що застосовується для зберігання символів національних алфавітів, якщо вони не можуть бути представлені звичайним однобайтовим типом char. Розмір цього типу залежить від реалізації; як правило, він відповідає типу short і займає 2 байта пам'яті.

 

1.1.3 Цілочисельні типи даних

Згідно зі стандартом мови С++ розмір типу int відповідає розміру машинного слова, властивому програмно-апаратній платформі конкретної системи програмування.

До типу int можна застосувати модифікатори long (довге ціле) та short (коротке ціле). Модифікатор типу long вказує, що дане буде займати не менше як 4 байти (у більшості систем програмування тип long має розмір саме 4 байти). Модифікатор short вказує, що дане не повинно перевищувати розмір типу int (у більшості реалізацій тип short займає 2 байти).

Тип int та його модифікації є знаковими типами. Це означає, що один біт (здебільшого найстарший) двійкового коду числа займає знак. Прийнято, що знак плюс позначається нулем, а знак мінус – одиницею. Від'ємні цілі числа у більшості комп'ютерних реалізацій зберігаються в доповнювальному коді.

Якщо певні дані набувають тільки додатних значень, то можна вдвічі збільшити діапазон їх додатних значень, оголосивши такі дані з модифікатором unsigned (беззнаковий). B беззнакових даних біт знака розглядається як звичайний числовий біт. Модифікатор unsigned можна застосовувати і до даних з типами long або short.

Внутрішнє представлення змінної цілого типу — ціле число у двійковому коді. Згідно формату IEEE всі додатні цілі числа зберігаються в пам'яті комп'ютера в прямому коді, а всі від'ємні – в доповняльному коді. Цілі числа зберігаються в пам'яті комп'ютера у зворотньому порядку розміщення байт числа.


1.1.4 Дійсні типи даних

Для збереження й опрацювання дійсних чисел (тобто чисел, що складаються з цілої та дробової частин) мова С++ підтримує три дійсних типи: float, double і long double.

Старший біт числа займає знак мантиси, за ним записується двійковий порядок числа, а потім - сама мантиса. Мантиса зберігається в нормалізованій формі, тобто старшою цифрою мантиси завжди є двійкова одиниця (нормалізація мантис виконується шляхом зсуву їх уліво з відповідним зменшенням значення порядку). Розміри мантиси і порядку для трьох дійсних типів є різними, вони визначають точність чисел і діапазон їх значень.

В пам'яті комп'ютера змінна типу float займає 4 байти, в яких один біт виділяється під знак, 8 – під порядок, 23 – під мантису.

Тип double займає 8 байт, у яких один розряд виділяється під знак, 11 – під порядок, 52 – під мантису. Насправді в мантисі 53 розряди, але старший завжди дорівнює одиниці і тому не зберігається.

Тип long double займає 10 байт (або 8 байт), в яких один розряд виділяється під знак, 15 – під порядок, інші 64 – під мантису. Записуються всі 64 розряди мантиси разом зі старшою одиницею.

Оскільки порядок може бути додатній і від'ємний, у двійковому коді він зберігається в зміщеному виді: до нього додається константа, яка рівна абсолютній величині максимального по модулю від'ємного порядку. У випадку типу float вона дорівнює 127, у випадку double – 1023, long double – 16383. Таким чином, максимальний по модулю від'ємний порядок представляється нульовим кодом.

Дійсні числа зберігаються в пам'яті комп'ютера у зворотньому порядку розміщення байт числа.

 

1.2 Похідні типи даних

 

1.2.1 Тип даних «Рядок»

По своїй суті тип рядок є ідентичним типу даних масив. Елементи рядка зберігаються в пам’яті комп’ютера так само, як і елементи масиву. Відмінністю є тільки те, що базовим типом для рядка є лише тип char[], та обмеження кількості елементів до 255.

1.2.2 Тип даних «Перерахування» («Перелік»)

Змінна, котра може приймати значення з деякого списку значень, називається змінною перелічуваного типу або переліком. Оголошення переліку задає тип змінної переліку і визначає список іменованих констант, що називається списком переліку. Імена елементів списку переліку задаються в фігурних дужках через кому.

Значенням кожного імені списку є деяке ціле число. Змінна типу переліку може приймати значення однієї з іменованих констант списку.

Кожен ідентифікатор іменує елемент переліку. Всі ідентифікатори в списку переліку повинні бути унікальними і повинні відрізнятись від всіх інших ідентифікаторів в тій самій області видимості, включаючи імена звичайних змінних та ідентифікатори з інших списків переліку. У випадку відсутності константного виразу перший ідентифікатор набуває значення 0, наступний ідентифікатор - значення 1, наступний - 2 і т.д. Отже, пам'ять, що відводиться під змінну типу перелік - це пам'ять, необхідна для розміщення значення типу іnt.

Ідентифікатор, зв'язаний з константним виразом, приймає значення, що задається цим константним виразом. Константний вираз повинен мати тип іnt і може бути як додатнім, так і від’ємним. Константні вирази можуть містити однакові значення. Наступний ідентифікатор в списку отримує значення, рівне константному виразу плюс 1, якщо цей ідентифікатор не має свого константного виразу.


1.2.3 Тип даних «Масив»

Масив - це однорідна складена структура даних статичної структури. Кожен компонент масиву характеризується своїм індексом. Допустимими типами індексів є всі порядкові типи. Для доступу до елементів масиву необхідно вказати ідентифікатор масиву з одним чи кількома індексами в дужках. Він зберігається як неперервна послідовність змінних того типу, якого оголошені елементи масиву.

Розмір пам'яті, що відводиться для зберігання масиву, обчислюється як добутку кількості елементів на розмір елемента.

Елементи масиву з найменшим індексом зберігаються по найменшій адресі пам’яті. Багатовимірні масиви зберігаються так, що найбільш правий індекс збільшується першим.

1.2.4 Тип даних «Структура»

На відміну від масиву, всі елементи якого однотипні, структура може містити елементи різних типів. В мові C++ структура є видом класу і має всі його властивості, але в багатьох випадках достатньо використовувати структури так, як вони визначені в мові С:

struct [ім'я_типу] {

тип_1 елемент _1:

тип_2 елемент _2;

тип_n елемент _n;

} [ список_оголошень ];

Елементи структури називаються полями структури і можуть мати будь-які типи, крім типу цієї ж структури, але можуть бути вказівниками на неї.

Для змінних одного й того ж структурного типу визначена операція присвоювання, при цьому відбувається поелементне копіювання. Структуру можна передавати в функцію і повертати як значення функції. Доступ до полів структури виконується за допомогою операцій вибору: "." (крапка) - при звертанні до поля через ім'я структури і "->" - при звертанні через вказівник. У пам'яті комп’ютера під кожний елемент структури виділяється визначений відповідно до типу цього елемента об’єм пам'яті. Елементи в пам'яті зберігаються в тому ж порядку, в якому вони були представлені в описі структури.

Розмір змінної структурного типу не можна обчислити просто як суму його елементів, тому що змінні певних типів мають вирівнюватись в пам'яті комп’ютера по деяким залежним від реалізації границям.

1.2.5 Тип даних «Об’єднання»

Об’єднання дуже схожі на структури. Однак на відміну від структури об'єднання зберігає значення тільки одного елемента в кожний момент часу. Інакше кажучи, коли виконується операція присвоювання значення елементу об'єднання, то перезаписується будь-яке попереднє присвоювання.

Головною особливістю об'єднання є те, що для кожного з оголошених елементів виділяється та сама область пам'яті, тобто вони перекриваються. Пам'ять, що відповідає змінній типу об'єднання, визначається величиною, необхідною для розміщення найбільш довгого елемента об'єднання. Коли використовується елемент меншої довжини, то змінна типу об'єднання може містити зайву пам'ять, що не використовується. Всі елементи об'єднання зберігаються в одній і тій cамій області пам'яті, починаючи з однієї адреси.

2. Система тестів

 

3.1 Базові типи даних

3.1.1 Логічний тип даних

b = (день народження * 5) % 10 * місяць народження;

b = (22* 5) % 10 * 9 = 99

 

Представлення логічної змінної bool b = 99;

Оскільки значення змінної b не нульове, отже b = false(99).

В пам’яті комп’ютера змінна b зберігається послідовність біт: 0110 0011.

В 16-ковій системі числення: 6316

Відповідь: 6316.

 

3.1.2 Символьний тип даних

1.1 Представлення символьної змінної:

wchar_t ch4;

ch4 = остання літера прізвища ‘t’

 

За таблицею кодів ASCIІ: символ ’k’ має порядковий номер 11610.

11610 = 7416

Тип wchar_t в пам’яті комп’ютера займає 2 байти.

Отже, цей символ в пам’яті комп’ютера буде представлений як послідовність:

16-ковій системі числення: 00 7416

Відповідь: 74 00 16.

3.1.3 Цілий тип даних

unsigned i3;

i3 = день народження * 215;

i5 = 22*215= 4 73010

Число 4 730 типу unsigned в пам'яті комп’ютера зберігається в двійковому коді і займає 4 байти: 4 73010 = 127A16

 

В пам’яті комп’ютера зберігається у зворотному порядку розміщення байт числа:

7A 12 00 00

 

Відповідь: 7A 12 00 00 16

 

3.1.4 Дійсний тип даних

long double d3

X – день народження(22), Y – місяць народження(9), Z = X * Y; Z = 22*9=198

d3 = – Z. X e Y;

d3 = – 198.22 e 9;

– 198.22 e 9 – константа еквівалентна - 198 220 000 00010

Оскільки у нас відсутня дробова частина, то перевід цілої частини:

 

198 220 000 00010= 2E 26 D5 2B 0016

 

Отже:

198 220 000 00010= 2E 26 D5 2B 0016 = 0010 1110 0010 0110 1101 0101 0010 1011 0000 0000

Нормалізація: 1.0111 0001 0011 0110 1010 1001 010112 * 1010 0101

 

Визначення мантиси: m=0111 0001 0011 0110 1010 1001 0101 1

Визначення зміщеного порядку: е = 102310 + 3710 = 106010 = 42416 = 100 0010 01002

 

Визначення знакового розряду: s=1 (бо число від’ємне).

Схема внутрішнього представлення:

s e m
1 біт 11 біт 52 біт

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

s e M
  100 0010 0100 0111 0001 0011 0110 1010 1001 0101 1000 0000 0000 0000 0000 0000

 

В 16- ковій системі числення: 1100 0010 0100 0111 0001 0011 0110 1010 1001 0101 1000 0000 0000 0000 0000 00002 = C2 47 13 6A 95 80 00 0016

 

В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа

 

Результат в 16- ковій системі числення: 00 00 80 95 6A 13 47 C2.

Відповідь: 00 00 80 95 6A 13 47 C2.


3.2 Похідні типи даних

3.2.1 Рядок символів

 

 

char *string15 = "\xabn\\\n\v""abcde""vnsc6\x23";

 

Після цього виконати деякі переприсвоювання згідно варіанту.

 

string15 [0] = '3';

string15 [2] = '1';

string15 [4] = '7';

string15 [6 ] = '2';

string15 [8] = '8';

string15 [10] = '6';

string15 [12] = '4';

string15 [14] = '7';

 

Розіб’ємо рядок на окремі біти:

char *string15 = "\xabn\\\n\v""abcde""vnsc6\x23";

string15 = ‘AB16’ ‘n’ ‘\’ ‘\n’ ‘\v’ ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘v’ ‘n’ ’s ’‘c’ ‘6’‘2316

в шістнадцятковій: AB 6E 5C 0A 0B 61 62 63 64 65 76 6E 73 63 36 23 00

Після виконання операцій присвоювання рядок матиме вигляд:

string15 = ‘3316’ ‘n’ ‘3116’ ‘\n’ ‘3716’ ‘a’ ’3216’ ‘c’ ‘3816’ ‘e’ ‘3616’ ‘n’ ’3416 ’‘c’ ‘3716’‘2316

в шістнадцятковій: 33 6E 31 0A 37 61 32 63 38 65 36 6E 34 63 37 23 00

 

Отже, в пам’яті комп’ютера після переприсвоєння рядок зберігатиметься як послідовність:

3.2.2 Переліки

enum color10 {

BLUE,

GREEN,

CYAN,

RED,

BROWN,

GRAY = 1,

YELLOW,

WHІTE,

MAGENTA,

LІGHTGRAY,

DARKGRAY = -2,

BLACK

} c1= CYAN,

c2= BROWN,

c3= DARKGRAY;

 

Значення кожного елемента переліку:

BLUE = 0 RED = 3 YELLOW =2 LІGHTGRAY = 5
GREEN = 1 BROWN = 4 WHІTE = 3 DARKGRAY = -2
CYAN = 2 GRAY = 1 MAGENTA = 4 BLACK = -1

 

Змінна с1 = CYAN (2), зберігатиметься в прямому коді і займатиме 4 байти (int).

210 = 0000 0000 0000 0000 0000 0000 0000 00102 = 00 00 00 0216

В пам’яті комп’ютера результат зберігатиметься в зворотному розміщенні байт числа:02 00 00 00

Відповідь: 02 00 00 0016.

Змінна с2 = BROWN = (4), зберігатиметься в прямому коді і займатиме 4 байти (int).

410 = 0000 0000 0000 0000 0000 0000 0000 01002 = 00 00 00 0416

В пам’яті комп’ютера результат зберігатиметься в зворотному розміщенні байт числа: 04 00 00 00

Відповідь:04 00 00 0016.

 

Змінна с3=DARKGRAY=(-2), зберігатиметься в доповняльному коді і займатиме 4 байти (int).

0000 0000 0000 0000 0000 0000 0000 0010

1111 1111 1111 1111 1111 1111 1111 1101

+ 1

1111 1111 1111 1111 1111 1111 1111 1110

Останній біт – знаковий, в данномук випадку рівний 1(число від’ємне)

-210 = 1111 1111 1111 1111 1111 1111 1111 11102 = FF FF FF FE16

В пам’яті комп’ютера результат зберігатиметься в зворотному розміщенні байт числа: FE FF FF FF

Відповідь:FE FF FF FF16.

3.2.3 Масив

 

wchar_t array10[][3][2] = {{1,123}, {23,'4', true}}

 

Після цього виконати переприсвоювання згідно варіанту.

 

array10[0][0][0] = 0; // 0 * 22 = 0

array10[0][0][1] = 132; // 6 * 22 = 132

array10[0][1][0] = 66; // 3 * 22 = 66

array10[0][1][1] = 22; // 1 * 22 = 22

array10[0][2][0] = 154 // 7 * 22 = 154

array10[0][2][1] = 44; // 2 * 22 = 44

array10[1][0][0] = 176; // 8 * 22 = 176

array10[1][0][1] = 132; // 6 * 22 = 132

array10[1][1][0] = 88; // 4 * 22 = 88

array10[1][1][1] = 154; // 7 * 22 = 154

 

Після переприсвоєння масив набуде значень (десяткових):

array10[0][0][0] = 0; array10[0][0][1] = 132;

array10[0][1][0] = 66; array10[0][1][1] = 22;

array10[0][2][0] = 154; array10[0][2][1] = 44;

array10[1][0][0] = 176; array10[1][0][1] = 132;

array10[1][1][0] = 88; array10[1][1][1] = 154;

 

 

В пам’яті комп’ютера масив зберігається як послідовність чисел яка читається зліва направо і зверху вниз по матрицях масиву, при чому байти числа записані в зворотньому порядку у шістнадцятковій системі числення.

Тип wchar_t займає у ПК 2 байти, тому:

00 00 84 00 42 00 16 00 9A 00 2C 00 B0 00 84 00 58 00 9A 00 00 00 00 0016

Відповідь: 00 00 84 00 42 00 16 00 9A 00 2C 00 B0 00 84 00 58 00 9A 00 00 00 00 0016

 

3.2.4 Структура

struct str6 {

unsigned long e:3;

unsigned long:2;

short:2;

signed short d;

unsigned:7;

double a;

short b:7;

char f;

char c[9];

}str;

str.a = 22.198;

str.b = 5 580;

str.c[0] = ‘K’

str.c[1] = ‘i’

str.c[2] = ‘n’

str.c[3] = ‘d’

str.c[4] = ‘r’

str.d =240 660;

str.e =7 128;

str.f = 7;

Структура, полям якої не присвоєно ніяких значень має всі байти однаковими і їх початковим значенням є число 11002 = С16, тому це може впливати на відображення певних полів при виводі зображення структури в пам’яті.

Визначимо представлення в пам'яті комп’ютера окремо кожного поля:

 

Представлення кожного поля в пям’яті комп’ютера:

 

1) Представлення дійсної змінної: double а = 22.19810;

Назва типу Іденти-фікатор Діапазон значень Внутрішній формат: s–знак,e–експонента,m–мантиса Значення числа Розмір пам’яті в байтах
Дійсне подвійної точності double від 1.7 10-308 до 1.7 10308

1 біт 11 біт 52 біта

s e   m  

 

(-1)S 1,m 2e –1023  

Перевід цілої частини:

2210 =>1616

Перевід дробової частини:

0,198 * 16 = 3.168 3

0,168 * 16 = 2,688 2

0.688 * 16 = 11,008 B

0.008 * 16 = 0,128 0

0.128 * 16 = 2,048 2

0.048 * 16 = 0,768 0

0.768 * 16 = 12,288 C

0.288 * 16 = 4,608 4

0.608 * 16 = 9,728 9

0.728 * 16 = 11,648 B

0.648 * 16 = 10,368 A

0.368 * 16 = 5,888 5

0.888 * 16 = 14,208 D

 

 

=0001 0110,0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0101 11012

 

Нормалізація:

1.0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0101 11012* 100100

Заокруглення:

1.0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0101| 1101+ 1

1.0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0110

Визначення мантиси: m=0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0110

Визначення зміщеного порядку: е = 102310 + 410 = 102710 = 40316 = 100 0000 00112

Визначення знакового розряду: s=0 (бо число додатнє).

Схема внутрішнього представлення:

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

s e M
  100 0000 0011 0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0110

 

В 16- ковій системі числення:

0100 0000 0011 0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 01102=

= 40 36 32 B0 20 C4 9B A616

 

Відповідь: ВПК:A6 9B C4 20 B0 32 36 4016.

2) Представлення змінної short b 5 580;

b = 5 58010 = 15 CC16

Відповідь: ВПК: CC 1516.

 

Представлення змінної char c[5]:
str.c[0] = ‘K’ = 4B16

str.c[1] = ‘i’ = 6916

str.c[2] = ‘n’ = 6E16

str.c[3] = ‘d’ = 6416

str.c[4] = ‘r’ = 7216


В пам’яті комп’ютера рядок зберігатиметься як:
Відповідь: ВПК: 4B 69 6E 64 71 CC CC CC CC16.

 

3) Представлення змінної signed short d;
d = 240 66010 = 3 AC 1416 = 1010 1100 0001 01002 = AC 1416

Відповідь: ВПК: 14 AC16.

4) Представлення змінної char f;

f =710= 716

Відповідь: ВПК: 0716.

5) Представлення змінної unsigned long e:3

e= 7 12810 = 1B D8;

оскільки виділено тільки 3 біти під змінну то вона набуде значення 0002

Відповідь: ВПК:016

 

Для розміщення даної структури в пам’яті комп’ютера вистачає 21 байт

struct str12 {

char:3;

float a;

int b:9;

unsigned e:3;

long d;

unsigned:2;

char c[8];

wchar_t f;

}str;

 

В і д п о в і д ь: В П К:




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 235; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.