![]() КАТЕГОРИИ: Архитектура-(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 (бо число від’ємне). Схема внутрішнього представлення:
Збірка за схемою:
В 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;
Значення кожного елемента переліку:
Змінна с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;
Перевід цілої частини: 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 0110 Визначення мантиси: m=0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0110 Визначення зміщеного порядку: е = 102310 + 410 = 102710 = 40316 = 100 0000 00112 Визначення знакового розряду: s=0 (бо число додатнє). Схема внутрішнього представлення: Збірка за схемою:
В 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[1] = ‘i’ = 6916 str.c[2] = ‘n’ = 6E16 str.c[3] = ‘d’ = 6416 str.c[4] = ‘r’ = 7216
3) Представлення змінної signed short d; Відповідь: ВПК: 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; Просмотров: 249; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |