Представлення статичних даних в пам’яті комп’ютера - Программирование, компьютеры и кибернетика курсовая работа
Главная
Программирование, компьютеры и кибернетика
Представлення статичних даних в пам’яті комп’ютера
Внутрішнє представлення в пам’яті комп’ютера даних базових та похідних типів, масивів. Ідентифікатор, зв'язаний з константним виразом та основи представлення даних. Алгоритм представлення цілих, дійсних, логічних і символьних чисел, структур і об’єднань.
посмотреть текст работы
скачать работу можно здесь
полная информация о работе
весь список подобных работ
Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
На тему: “Представлення статичних даних в пам'яті комп'ютера”
Визначити внутрішнє представлення в пам'яті комп'ютера даних базових типів. Розглянути основні прості (цілі, дійсні, символьні, логічні) типи даних:
double d2 = 22*11. 22e + 11 = 242.22e+11;
Визначити внутрішнє представлення в пам'яті комп'ютера даних похідних типів
2.1. Представлення рядків символів. Визначити представлення в пам'яті комп'ютера рядків символів.
char *string18 = "143%\\\b\\wf\n\v""""df""'df '\x2";
Та виконати наступні переприсвоювання:
2.2. Представлення переліків. Визначити представлення в пам'яті комп'ютера переліків.
2.3. Представлення масивів. Визначити представлення в пам'яті комп'ютера масивів.
unsignedchararray13[][2][5] = {{1,4},657,23,533}
Для кожного варіанту виконати наступні переприсвоюння:
2.4. Представлення структур. Визначити представлення в пам'яті комп'ютера структур.
Для кожного варіанту виконати надання значень елементам структури:
2.5. Представлення об'єднань. Визначити представлення в пам'яті комп'ютера об'єднань.
1.2.1 Представлення рядків символів
Типи short, іnt і long призначені для представлення цілих чисел.
Цілі типи можуть бути знаковими (sіgned) і без знаковими (unsіgned). В знакових типах самий лівий біт використовується для зберігання знака числа (0 - плюс, 1 - мінус). Решта бітів містять числове значення. В без знакових типах всі біти використаються для числового значення. За замовчуванням всі цілочисельні типи вважаються знаковими.
Цілі типи розрізняються діапазоном значень, які можуть приймати цілочисельні змінні і розміром області пам'яті, виділеної під цю змінну, а конкретні розміри перерахованих типів залежать від конкретної реалізації. Так, представлення в пам'яті і область значень для типів іnt і unsіgnedіnt чітко не визначені в мові С++. За замовчуванням розмір іnt (зі знаком і без знака) відповідає реальному розміру цілого на даній машині. Наприклад, на 16-ти розрядній машині тип іnt завжди займає 16 розрядів або 2 байта. На 32-х розрядній машині тип іnt завжди займає 32 розряди або 4 байта. Таким чином, тип іnt буде еквівалентним типам short іnt або long іnt залежно від реалізації. Аналогічно, тип unsіgnedіnt еквівалентний типам unsіgned short або unsіgned long.
Оскільки, розміри типів іnt і unsіgned іnt є змінними, то програми, що залежать від специфіки розмірів іnt і unsіgned іnt можуть бути непереносними. Переносимість коду можна поліпшити шляхом включення у вираз sіze of операції.
Дійсні константи записуються у двох формах - з фіксованою десятковою крапкою або в експонентному виді. В першому випадку крапка використовується для поділу цілої і дробової частин константи. Як ціла, так і дробова частини можуть бути відсутніми (наприклад 1.2, 0.725, 1.,.35, 0.). В трьох останніх випадках відсутня або дробова, або ціла частина. Десяткова крапка повинна обов'язково бути присутньою, інакше константа буде вважатись цілою.
Експонентна форма запису дійсної константи містить знак, мантису і десятковий порядок (експоненту). Мантиса - це будь-яка додатня дійсна константа у формі з фіксованою крапкою або цілою константою. Порядок вказує степінь числа 10, на яку домножується мантиса. Порядок відокремлюється від мантиси буквою 'E' або 'e' (від слова exponent). Порядок може мати знак плюс або мінус, у випадку додатнього порядку знак плюс можна опускати. Наприклад:
1.5e+6 - константа еквівалентна 1500000.0
1e-4 - константа еквівалентна 0.0001
-.75E3 - константа еквівалентна -750.0
У мові С++ дійсні типи або типи з рухомою комою представляються трьома розмірами, що характеризують точність представлення дійсних чисел:
long double - розширеної точності (у деякихреалізаціях тип long double може бути відсутній)
Константи з рухомою комою мають за замовчуванням тип double. Саме він є найбільш природнім для комп'ютера. У програмуванні треба по можливості уникати типу float, тому що його точність недостатня, а процесор однаково при виконанні операцій перетворить його в тип double. Один з випадків, де застосування типу float виправдане - тривимірна комп'ютерна графіка.
Можна явно вказати тип константи за допомогою суфіксів F, f (float) і L, l (long). Наприклад, константа 2E+6L буде мати тип long double.
В пам'яті комп'ютера змінна типу float займає 4 байти, в яких один біт виділяється під знак, 8- під порядок, 23 - під мантису.
Розряди мантиси включають один розряд цілої частини, що завжди дорівнює одиниці, і фіксовану кількість розрядів дробової частини. Оскільки старший двійковий розряд мантиси завжди дорівнює одиниці, зберігати його необов'язково, і у двійковому коді він відсутній. Фактично двійковий код зберігає тільки розряди дробової частини мантиси. Отже, насправді, у типу float мантиса містить 24 розряди, але старший розряд завжди дорівнює одиниці, тому зберігати його не потрібно.
Тип double займає 8 байт, у яких один розряд виділяється під знак, 11 - під порядок, 52 - під мантису. Насправді в мантисі 53 розряди, але старший завжди дорівнює одиниці і тому не зберігається.
Тип long double займає 10 байт (або 8 байт), в яких один розряд виділяється під знак, 15 - під порядок, інші 64 - під мантису. Записуються всі 64 розряди мантиси разом зі старшою одиницею.
Оскільки порядок може бути додатній і від'ємний, у двійковому коді він зберігається в зміщеному виді: до нього додається константа, яка рівна абсолютній величині максимального по модулю від'ємного порядку. У випадку типу float вона дорівнює 127, у випадку double - 1023, long double - 16383. Таким чином, максимальний по модулю від'ємний порядок представляється нульовим кодом.
Дійсні числа зберігаються в пам'яті комп'ютера у зворотному порядку розміщення байт числа.
комп'ютер ідентифікатор алгоритм число
Змінна, котра може приймати значення з деякого списку значень, називається змінною перелічуваного типу або переліком. Оголошення переліку задає тип змінної переліку і визначає список іменованих констант, що називається списком переліку. Імена елементів списку переліку задаються в фігурних дужках через кому.
Значенням кожного імені списку є деяке ціле число. Змінна типу переліку може приймати значення однієї з іменованих констант списку. Змінні типу enum можуть використовуватись і як операнди в арифметичних операціях та в операціях відношення, і як індекси в індексних виразах.
Список переліку може містити одну або декілька конструкцій виду:
ідентифікатор [= константний вираз]
Кожен ідентифікатор іменує елемент переліку. Всі ідентифікатори в списку переліку повинні бути унікальними і повинні відрізнятись від всіх інших ідентифікаторів в тій самій області видимості, включаючи імена звичайних змінних та ідентифікатори з інших списків переліку.
У випадку відсутності константного виразу перший ідентифікатор набуває значення 0, наступний ідентифікатор - значення 1, наступний - 2 і т.д. Отже, пам'ять, що відводиться під змінну типу перелік - це пам'ять, необхідна для розміщення значення типу іnt.
Ідентифікатор, зв'язаний з константним виразом, приймає значення, що задається цим константним виразом. Константний вираз повинен мати тип іnt і може бути як додатнім, так і від'ємним. Константні вирази можуть містити однакові значення. Наступний ідентифікатор в списку отримує значення, рівне константному виразу плюс 1, якщо цей ідентифікатор не має свого константного виразу.
Вказівники - Коли компілятор обробляє оператор визначення змінної, наприклад, іnt і=10, він виділяє пам'ять відповідно до типу (в прикладі іnt) та ініціалізує її заданим значенням (в прикладі 10). Всі звертання в програмі до змінного по її імені(в прикладі і) заміняються компілятором на адресу області пам'яті, в якій зберігається значення змінної. Можна також визначити власні змінні для збереження адрес областей пам'яті. Такі змінні називаються вказівниками.
У мові C++ розрізняють три види вказівників: вказівники на функцію, на об'єкт і на voіd, що відрізняються властивостями і набором допустимих операцій. Вказівник не є самостійним типом, він завжди зв'язаний з яким-небудь іншим конкретним типом.
Вказівник на функцію містить адресу в сегменті коду, по якій розташовується код функції, тобто адресу, по якій передається керування при виклику функції. Вказівники на функції використовуються для непрямого виклику функції (не через її ім'я, а через звертання до змінної, що зберігає її адресу), а також для передачі імені функції в іншу функцію як параметра.
Вказівник на функцію має тип "вказівник функції, що повертає значення заданого типу і має аргументи заданого типу":
тип (*ім'я) (список_типів_аргументів);
Наприклад, оголошення іnt (*fun) (double, double); задає вказівник на функцію з ім'ям fun, що повертає значення типу іnt і має два аргументи типу double.
Вказівник на об'єкт містить адресу області пам'яті, у якій зберігаються дані визначеного типу (базового або похідного). Найпростіше оголошення вказівника на об'єкт (далі будемо називати просто вказівник) має вигляд: тип *ім'я; де тип може бути довільним, крім посилання і бітового поля, причому тип може бути до цього моменту тільки оголошений, але ще не визначений (наприклад, в структурі може бути присутнім вказівник на структуру того ж типу). Можна визначити вказівник на вказівник.
Зірочка відноситься безпосередньо до імені, тому для того, щоб оголосити кілька вказівників, потрібно ставити її перед ім'ям кожного з них. Наприклад,в операторі іnt *a, b, *c; описуються два вказівники на ціле з іменами а і с, а також ціла змінна b.
Розмір вказівника залежить від моделі пам'яті. Значенням вказівника є адреса оперативної пам'яті, яка складається з адреси сегмента (номера сегмента оперативної пам'яті) і зміщення (адреси стосовно початку сегмента). Формат адреси: <сегмент> :<зміщення>
Адреса сегмента зберігається в старшому слові, а зміщення - у молодшому слові повної адреси.
Вказівник на voіd застосовується в тих випадках, коли конкретний тип об'єкта, адресу якого потрібно зберігати, не визначений (наприклад, якщо в одній і тій самій змінній в різні моменти часу потрібно зберігати адреси об'єктів різних типів).
Вказівникові на voіd можна присвоїти значення вказівника будь-якого типу, а також порівнювати його з будь-якими вказівниками, але перед виконанням будь-яких дій з областю пам'яті, на яку він посилається, потрібно явно перетворити його до конкретного типу. Вказівник може бути константою або змінною, а також вказувати на константу або змінну.
Масив - це впорядкований скінченний набірданих одного типу, які зберігаються в послідовно розташованих комірках оперативної пам'яті і мають спільну назву. З оголошення масиву компілятор одержує інформацію про тип елементів масиву та їх кількість.
Якщо початкових значень меньше, ніж елементів в масиві, то елементам, що залишились автоматично надаються нульові початкові значення. Наприклад, елементам масиву b можна присвоїти нульові початкові значення за допомогою оголошення intb[12] = {3, 2, 1}; яке явно надає початкові значення першим трьом елементам масиву і неявно надає нульові початкові значення решті дев'яти елементам, оскільки початкових значень меньше, ніж оголошено елементів масиву.
Однак, по замовчуванню автоматично масив не отримує нульові початкові значення неявно. Треба присвоїти нульові початкові значення хоча б першому елементу для того, щоб автоматично були обнулені всі решта елементів, наприклад:
intb[5] = {0}; // аналогічно присвоєнням :b[0]=0; b[l]=0; b[2]=0; b[3]=0; b[4]=0;
Синтаксичною помилкою буде завдання в списку більшої кількості початкових значень, ніж є елементів в масиві. Наприклад, оголошення масиву
призведе до синтаксичної помилки, оскільки список ініціалізації містить 6 початкових значень, а масив має тільки 5 елементів.
Багатовимірні масиви компілятор розглядає як послідовність одновимірних, тому до елементів такого масиву, як і для одновимірних, можна також звертатись через вказівники.
В пам'яті комп'ютера елементи масиву з першого до останнього запам'ятовуються в послідовних зростаючих комірках пам'яті. Між елементами масиву в пам'яті розриви відсутні. Елементи масиву з найменшим індексом зберігаються по найменшій адресі пам'яті.
Багатовимірні масиви в пам'яті комп'ютера зберігаються так, що найбільш правий індекс збільшується першим.
Розглянемо двовимірний масив цілих чисел:
іntmass [3][2]= { {1, 1}, {0, 2}, {1, 3} };
Структура. На відміну від масиву, всі елементи якого однотипні, структура може містити елементи різних типів. В мові C++ структура є видом класу і має всі його властивості, але в багатьох випадках доситатньо використовувати структури так, як вони визначені в мові С:
Елементом структури може бути бітове поле, що забезпечує доступ до окремих бітів пам'яті. Поза структурами бітові поля використовувати не можна.
Бітові поля - це особливий вид полів структури. Вони використовуються для щільного упакування даних, наприклад, прапорців типу "так/ні". Найменьша по довжині комірка пам'яті, яку можна адресувати - 1 байт, а для збереження прапорця досить одного біта.
При описі бітового поля після імені через двокрапку вказується довжина поля в бітах, що задається цілим виразом або константою. Поле нульової довжини означає вирівнювання на границю наступного слова.
Допускаються неіменовані поля бітів. Вони не впливають на зміст іменованих полів, але певним чином можуть поліпшувати розміщення полів в пам'яті.
Структури бітових полів можуть містити і знакові елементи. Але, навіть цілі поля можуть розглядатись як без знакові. Тому рекомендується описувати бітові поля як unsіgned.
В пам'яті бітові поля розміщуються на відповідних границях слів, при цьому деякі біти слів можуть залишатись невикористаними. Поле, яке не можна розмістити у місце, що залишилося до границі слова, розміщується в наступне слово. Поле не може бути ширшим за слово. На деяких машинах бітові поля розміщуються справа наліво, а на деяких - зліва направо.
Об'єднання дуже схожі на структури. Однак на відміну від структури об'єднання зберігає значення тільки одного елемента в кожний момент часу. Інакше кажучи, коли виконується операція присвоювання значення елементу об'єднання, то перезаписується будь-яке попереднє присвоювання.
Головною особливістю об'єднання є те, що для кожного з оголошених елементів виділяється та сама область пам'яті, тобто вони перекриваються. Пам'ять, що відповідає змінній типу об'єднання, визначається величиною, необхідною для розміщення найбільш довгого елемента об'єднання. Коли використовується елемент меншої довжини, то змінна типу об'єднання може містити зайву пам'ять, що не використовується. Всі елементи об'єднання зберігаються в одній і тій самій області пам'яті, починаючи з однієї адреси.
1.1 Завдання 1. Внутрішні формати базових типів
Визначити внутрішнє представлення в пам'яті комп'ютера даних базових типів. Розглянути основні прості (цілі, дійсні, символьні, логічні) типи даних:
Для представлення змінної типу bool в пам'яті комп'ютера потрібен 1 біт але на практиці її розмір дорівнює машинному слову і коли змінна приймає значення відмінне від 0, то ВПК записується «1», а якщо 0, то ВПК 0.
Змінна типу char займає в пам'яті комп'ютера 1 байт. ASCII код латинської літери `r' - 114 10 . Для отримання значення змінної ВПК, необхідно перевести це число до двійкової системи числення. Приставка unsigned вказує на те що діапазон значень у цього типу від 0 до 255.
Оскільки char займає 1 байт, то «перевертання» числа побайтно не впливає на його зміст.
Отже, ВПК (ch2) - 01110010 2 , або 72 16
Змінна типу unsignedshort займає в пам'яті комп'ютера 2 байти. Для того, щоб визначити внутрішнє представлення в пам'яті комп'ютера цього числа, його спочатку треба перевести у двійкову систему числення, оскільки додатні цілі числа зберігаються у прямому двійковому коді.
Доповнимо це число зліва нулями до 2 байт: 0000 1010 1011 1110 2 = 0ABE 16
Для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК цілі числа зберігаються у зворотньому порядку розміщення байт числа:
doubled2 = 242.22e+11 = 242.22 * 10 11 = 24222000000000;
24222000000000 10 = 16079FB4AC00 16 = 0001 0110 0000 0111 1001 1111 1011 0100 1010 1100 0000 0000 2
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
1 0110 0000 0111 1001 1111 1011 0100 1010 1100 0000 0000,0 2
1,0110 0000 0111 1001 1111 1011 0100 1010 1100 0000 0000 0 2 * 10 101100
1,0110 0000 0111 1001 1111 1011 0100 1010 1100 0000 0000| 0 2
1,0110 0000 0111 1001 1111 1011 0100 1010 1100 0000 0000 2 * 10 101100
Тип double займає ВПК 8 байт (64 біт)
З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.
Знайдемо експоненту е = 1023 10 + 44 10 = 1067 10 = 42B 16 = 0100 0010 1011
0110 0000 0111 1001 1111 1011 0100 1010 1100 0000 000000000000
0100 0010 1011 0110 0000 0111 1001 1111 1011 0100 1010 1100 0000 000000000000 2 = 42 B6 07 9F B4 AC 00 00 16
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типуdouble зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК (d2) - 00 00 ACB4 9F 07B642 16
1.2 Завдання 2. Внутрішні формати похідних типів
Визначити внутрішнє представлення в пам'яті комп'ютера даних похідних типів.
1.2.1 Представлення рядку символівв пам'яті комп'ютера.
char *string18 = "143%\\\b\\wf\n\v""""df""'df'\x2";
string18 = 143%\\\b\\wf\n\vdf'df'\x2
Виконуємо наступні переприсвоюння:
char *string18 = "340%0\b6w7\n3d0'7f'\x2";
Отже ВПК рядок символів - "340%0\b6w7\n3d0'7f'\x2":
33 34 30 25 30 08 36 77 37 0A 33 64 30 27 37 66 20 27 02 16 + термінальний нуль 00 16
ВПК(string18): 33 34 30 25 30 08 36 77 37 0A 33 64 30 27 37 66 20 27 02 00 16
1.2.2 Представлення перерахувань в пам'яті комп'ютера
BLUE,// 0, бо не визначено (немає присвоєння значення змінній BLUE)
GREEN, // 1, (оскільки невизначено, то GREEN = BLUE +1)
CYAN = 9, // 9, бо вказано (змінній CYANприсвоєно значення 9)
RED,// 10, (оскільки невизначено, то RED = CYAN +1)
BROWN,// 11, (оскільки невизначено, то BROWN = RED +1)
GRAY, // 12, (оскільки невизначено. то змінній GRAY = BROWN +1)
YELLOW = -1,// -1, бо вказано (змінній YELLOW присвоєно значення -1)
WHІTE,// 0, (оскільки невизначено, то WHITE = YELLOW +1)
MAGENTA,// 1, (оскільки невизначено, то MAGENTA = WHITE+1)
LІGHTGRAY,// 2, (оскільки невизначено, то LIGHTGRAY = MAGENTA +1)
DARKGRAY = 2,// 2, бо вказано (змінній DARKGRAY присвоєно значення 2)
BLACK// 3, (оскільки невизначено, тоBLACK = DARKGRAY +1)
c2= BROWN,// c2 = BROWN = 11 10 = B 16 ;
c3= DARKGRAY;// c3 = DARKGRAY = 2 16 ;
1.2.3 Представлення масивів в пам'яті комп'ютера
unsignedchararray13[][2][5] = {{1,4},657,23,533}
Оскільки всередині головних фігурних дужок знаходиться 1 пара другоряднихі кількість чисел поза дужками менша ніж 10 (2*5), то це означає що розмірність масиву рівна array13[2][2][5].
Також цей масив можна записати у наступному вигляді
{{{{1},{4},{0},{0},{0}},{{0},{0},{0},{0},{0}}},{{{657},{23},{533},{0},{0}},{{0},{0},{0},{0},{0}}}}
{{{{0},{198},{66},{0},{0}},{{132},{154},{66},{0},{154}}},{{{657},{23},{533},{0},{0}},{{0},{0},{0},{0},{0}}}}
Через те що тип масиву unsignedchar то діапазон допустимих значень 0-255 а у нас є числа які перевищують цей діапазон: 657 10 =0291 16 а тип unsignedchar займає у ВПК 1 байт, тому відбувається втрата значимості числа, тому у масиві воно буде мати вигляд 91 16 те саме стосується числа 533 10 =0215 16 .
Отже,ВПК 16 = 00 C6 42 00 00 84 9A 42 00 9A 91 17 15 00 00 00 00 00 00 00
1.2.4 Представлення структур в пам'яті комп'ютера
// Оскільки далі нема бітового поля, то незаповнені байти
// заповняться з 4 біт до 2 байт оскільки тип shotу ВПК займає 2 байти.
charc[11];// Займає ВПК 1*11 = 11 байт
unsignedshort :5;// Займає ВПК 5 біт
// Оскільки далі нема бітового поля, то незаповнені байти
// заповняться з 5 біт до 2 байтоскільки тип unsignedshotу ВПК займає 2 байти.
// відбувається вирівнювання але через те ще сума байт попередніх змінних // дорівнює 18 а це число не ділиться націло на кількість байттипу long
// який у ВПК займає 4 байти тому відбувається вирівнювання до 20 байт
Загальний розмір структури дорівнює 2+2+11+1+4+4+10+2 = 34 байти, але 34 не ділиться націло на 8 (розмір найбільшого елемента структури) тому відбувається вирівнювання до 40 байтів.
На даному етапі ВПК структури заповнене 40-ома однаковими байтами СС, оскільки вона ще пуста. Виконую надання значень елементам структури.
0.242 10 =3DF3B645A1CA 16 = 001111011111001110110110010001011010000111001011 2
22.242 10 = 16,3DF3B645A1CA 16 = 0001 0110 , 001111011111001110110110010001011010000111001011 2
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
1, 0110001111011111001110110110010001011010000111001011 2 * 10 0100
1, 0110001111011111001110110110010001011010000111001011 | 0000 2
+1, 01100011110111110 01110110110010001011010000111001011 2
Тип double займає ВПК 8 байт (64 біт)
З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.
Знайдемо експоненту е = 1023 10 + 4 10 = 1027 10 = 403 16 = 010000000011 2
0110 0011110111110011101101100100010110100001 11001011
0100000000110110 0011110111110011101101100100010110100001 11001011 2 = 40363DF3B645A1CB 16
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу double зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК - CB A1 45 B6 F3 3D 36 40 16
Під змінну aзарезервовано 8 байт структури 24-31, тому вони заповнюються представленням ВПК longdouble числа а
Під змінну b зарезервовано 2 байти структури 0-1,тому вони заповнюються представленням ВПК short числа b:
Через те що тип short займає 2 байти ВПК відбувається втрата точності.
Решта вільних байт масиву будуть заповнені числом СС 16
Під масив с[] зарезервовано в структурі байти 4 - 14.
Туди запишеться ВПК масиву: 50 72 6F 63 68 C 16
Під змінну d зарезервовано 4 байти структури, тому вони заповнюються представленням ВПК long числа d:
Під змінну e зарезервовано 2 байти структури 33-34,тому вони заповнюються представленням ВПК short числа e:
ВПК число f типу char представляється ASCII кодом цифри 7, а це 37 16 . Це значення запишеться в 15-й байт структури, оскільки там зарезервовано змінну f.
Тепер ми маємо остаточне представлення структури в пам'яті комп'ютера:
Отже у ВПК ця структура представлена: 98 FBC 50 72 6F 63 68 C 37 C 00 00 00 00 CBA1 45 B6 F3 3D 36 40 08 22 C 16
1.2.5 Представлення об'єднань в пам'яті комп'ютера
Визначимо представлення в пам'яті комп'ютера окремо кожного елемента об'єднання:
wchar_t a[5];// Займає ВПК 2*5 = 10 байт
Оскільки 10 не ділиться на 8 без залишку буде присутнєвирівнювання до 10 байт.
Ця структура займає ВПК 10 + 8+ 2= 20 байт.
Масиву gне надано ніякого значення, тому його представлення ВПК таке:
Звідси, представлення структури ВПК 16 :
36 00 37 00 33 00 30 00 37 00СС СС СС СС СС СС СС СССС СС 16
ВПК змінна типу short займає 2 байти.
Змінній с надано значення: c = 99000 10 = 182B8 16 ;
Оскільки boolb займає 1 байт, буде присутнє вирівнювання до 8 байт. Тому ця структура займатиме ВПК = 8 + 1 + 7 =16 байт.
Змінній bне надано ніякого значення, тому його представлення ВПК таке: ВПК 16 : СС 16
Змінній е надано таке значення: e = 74093 10 ;
74093 10 = 01 21 6D 16 = 00010010000101101101 2
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
1,0010000101101101000000000000000000000000000000000000 2 *10 10000
Тип double займає ВПК 8 байт (64 біт)
З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.
Знайдемо експоненту е = 1023 10 + 16 10 = 1039й 10 = 40F 16 = 01000000 1111 2
0010000101101101 0000 0000 0000 0000 0000 0000 0000 0000 0000
01000000 11110010000101101101 0000 0000 0000 0000 0000 0000 0000 0000 0000 2 = 40F216D000000000 16
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу double зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК - 00 00 00 00 00 D0 16 F2 40 16
Звідси, представлення структури ВПК:
00 00 00 00 00 D0 16 F2 40СССС СС СС СС СС СС СС 16
Величиною, необхідною для розміщення найбільш довгого елемента об'єднання є перша структура, під яку виділяється 20 байт (перша структура) але через те що розмір найбільш довгої змінної обєднання є doublee, яка займає у памяті 8 байт буде присутнє вирівнювання (оскільки 20 не ділиться на 8 націло) до 24 байт.
- Після виконання першої операції присвоєння un.e = 74093; в цих 18 байтах пам'ятів 16- ковій системі числення буде записана така послідовність:
00 00 00 00 00 D0 16 F2 40СС СС СС СС СС СС СС СС CCCCCCCCCCCCCC 16
- Після виконання другої операції присвоєння un.c = 99000; перші 2 байта пам'яті будуть переписані і в результаті в пам'яті в 16- ковій системі числення буде записана така послідовність:
B8 82 00 00 00 D0 16 F2 40 СС СС СС СС СС СС СС СС CC СС ССCCCCCCCC 16
- Наступна операція: un.a[0] = '6';
36 0000 00 00 D0 16 F2 40 СС СС СС СС СС СС СС СС CC СС ССCCCCCCCC 16
- Наступна операція: un.a[1] = '7';
36 00 37 0000 D0 16 F2 40 СС СС СС СС СС СС СС СС CC СС ССCCCCCCCC 16
- Наступна операція: un.a[2] = '3';
36 00 37 00 33 0016 F2 40 СС СС СС СС СС СС СС СС CC СС ССCCCCCCCC 16
- Наступна операція: un.a[3] = '0';
36 00 37 00 33 00 30 0040 СС СС СС СС СС СС СС СС CC СС ССCCCCCCCC 16
- Наступна операція: un.a[4] = '7';
36 00 37 00 33 00 30 00 37 00СС СС СС СС СС СС СС СС СС ССCCCCCCCC 16
Остаточне представлення об'єднання ВПК:
36 00 37 00 33 00 30 00 37 00СС СС СС СС СС СС СС СС СС ССCCCCCCCC 16
Оголошуємо необхідні змінні. Оголошуємо вказівник на змінну типу “unsignedchar” і присвоюємо їй адресу змінної, яку необхідно прочитати. Побайтно зчитуємо дані з пам'яті і виводимо їх в шіснадцятковій системі числення, також виводимо десяткове значення змінної.
Виконуючи цю курсову роботу я повторив, як визначити внутрішнє представлення цілих, дійсних, логічних та символьних чисел в пам'яті комп'ютера. Також я вивчив багато нового про представлення в пам'яті комп'ютера рядків символів, перерахувань, масивів, структур та об'єднань.
1. Лисак Т.А. Основи представлення даних в пам'яті комп'ютера: Конспект лекцій (частина І) з дисципліни “Програмування. Частина IIІ. Структури даних та алгоритми". - Львів: Видавництво НУ “Львівська політехніка”, 2010 - 37 с.
2. Конспект лекцій з дисципліни “Програмування. Частина IIІ. Структури даних та алгоритми".
3. Вирт Н. Алгоритмы + структуры данных = программы: Пер. с англ. - М.:Мир, 2008.-406 с.
4. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. - М.:Мир, 2009.-360 с.
5. Кнут Д. Искусство програмирования, том 1. Основные алгоритмы. - М.:Изд.дом ”Вильямс”, 2007. - 720 с.
cout << " 1.1 Логiчний тип" << endl;
unsigned char *b_1 = (unsigned char *)(&b);
for (int i = 0; i < sizeof(b); i++)
cout << " 1.2 Символьний тип" << endl;
unsigned char *ch2_1 = (unsigned char *)(&ch2);
for (int i = 0; i < sizeof(ch2); i++)
unsigned char *i1_1 = (unsigned char *)(&i1);
for (int i = 0; i < sizeof(i1); i++)
cout << " 1.4 Дiйсний тип" << endl;
unsigned char *d2_1 = (unsigned char *)(&d2);
for (int i = 0; i < sizeof(d2); i++)
cout << " 2.1 Рядок символiв" << endl;
char *string18 = "340%0\b6w7\n3d0'7f'\x2";
cout << " 2.2 Представлення перерахувань" << endl;
unsigned char *c1_1 = (unsigned char *)(&c1);
for (int i = 0; i < sizeof(c1); i++)
unsigned char *c2_1 = (unsigned char *)(&c2);
for (int i = 0; i < sizeof(c2); i++)
unsigned char *c3_1 = (unsigned char *)(&c3);
for (int i = 0; i < sizeof(c3); i++)
cout << " 2.3 Представлення масивiв" << endl;
unsigned char array13[2][2][5] = {{{{0},{198},{66},{0},{0}},{{132},{154},{66},{0},{154}}},{{{657},{23},{533},{0},{0}},{{0},{0},{0},{0},{0}}}};
unsigned char *array12_1 = (unsigned char *)(&array13);
for (int i = 0; i < sizeof(array13); i++)
cout << " 2.4 Представлення структур" << endl;
unsigned char *str_1 = (unsigned char *)(&str);
for (int i = 0; i < sizeof(str); i++)
/* - - - - - - - - - - - - - - - - -- - - - -*/
cout << " 2.5 Представлення об'єднань" << endl;
unsigned char *un_1 = (unsigned char *)(&un);
for (int i = 0; i < sizeof(un); i++)
Ознайомлення з поняттям HMI (Human Machine Interface) на прикладі редактора представлення даних системи Trace Mode. Структура та властивості редактора представлення даних для розробки графічної частини проекту системи управління. Типи графічних елементів. лабораторная работа [1,2 M], добавлен 20.03.2011
Представлення типів даних при роботі нейронними мережами. Корисні вхідні змінні, їх тестування методом спроб та помилок. Генетичний алгоритм відбору вхідних даних. Нелінійне пониження розмірності, пропущені значення. Створення нового набору даних. реферат [1,1 M], добавлен 09.07.2011
Фізичне та логічне представлення топології мереж, кабельна система. Вибір мережевого устаткування. Імітаційне моделювання корпоративної комп’ютерної мережі в NetCracker 4.0. Представлення локальної мережі в Microsoft Visio 2013, економічне обґрунтування. курсовая работа [993,5 K], добавлен 17.05.2015
Поняття HMI (Human Machine Interface) на прикладі редактора представлення даних системи Trace Mode. Побудова людино-машинного інтерфейсу за допомогою графічних елементів. Короткий огляд форм відображення: динамічного тесту, кнопок, колірних індикаторів. лабораторная работа [633,9 K], добавлен 20.03.2011
Практичне застосування систем кодування знакової та графічної інформації в електронних обчислювальних машинах. Позиційні системи числення. Представлення цілих і дійсних чисел. Машинні одиниці інформації. Основні системи кодування текстових даних. практическая работа [489,5 K], добавлен 21.03.2012
Електронна база даних як послідовність даних заданої структури, записана на магнітний диск комп'ютера, її типи, основні та невід'ємні властивості. Призначення та оцінка можливостей системи управління. Моделі даних та головні принципи їх функціонування. презентация [352,2 K], добавлен 04.12.2014
Бізнес процеси й елементи даних. Специфікація елементів
Представлення статичних даних в пам’яті комп’ютера курсовая работа. Программирование, компьютеры и кибернетика.
Определение Коэффициента Вязкости Жидкости Лабораторная Работа
Пособие по теме Типы и модели рыночного хозяйства. Экономические реформы в России
Произведения На Темы Сочинений Егэ
Курсовая работа по теме Здания и сооружения из монолитного железобетона
Учебное пособие: Методические указания для студентов и аспирантов Сыктывкар 2006
Курсовая работа по теме Государственный долг РФ, его виды. Долговые обязательства и их сроки
Реферат: Кормление пчел. Скачать бесплатно и без регистрации
Эссе Царь И Природы Человек
Выбор Вида Спорта Реферат
Сочинение по теме Самый таинственный герой романа Л.Н. Толстого Война и Мир
Коррупция Как Угроза Экономической Безопасности России Реферат
Контрольная работа: Примеры решения эконометрических заданий
В Каком Классе Сдают Декабрьское Сочинение
Дипломная работа по теме Разработка программного продукта
Особенности правового статуса предпринимателя без образования юридического лица
Развитие Рынка Ценных Бумаг В России Реферат
Контрольная работа по теме Виды ответственности за нарушение законодательства об использовании и охране вод
Эксплуатация Электрооборудования Реферат
Курсовая работа: Поняття та ознаки судової влади. Суд і правосуддя
Эссе Жазу Әдістемесі
Искусство Ближнего и Среднего Востока - Культура и искусство контрольная работа
Невынашивание беременности - Медицина реферат
Грибы семейства Сыроежковые - Биология и естествознание контрольная работа