Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
/
Звіт
про виконання лабораторної роботи №1
з дисципліни:
“Програмування, частина 3 (Структури даних та алгоритми)”
на тему:“ Внутрішнє представлення в пам’яті комп’ютера статичних даних ”
Львів
2017
Мета: дослідження внутрішнього представлення в пам’яті комп’ютера даних статичної структури.
Постановка задачі
Дослідити внутрішнє представлення в пам’яті комп’ютера даних статичної структури.
Змінні, які потрібно проаналізувати :
bool b = (25*5) % 10 * 12 = 60;
unsigned char ch2 = ‘ u ’;
unsigned long i5 = 25*352 = 8800;
double d2 = Z . X e + Y;
d2 = 300.25e + 12;
де X = 25, Y = 12; //(дата народження 25.12.1998)
Система тестів
1) bool b = (22*5) % 10 * 1=60;
Тип bool - логічний тип даних і у пам’яті комп’ютера він представляється одним байтом. Має два стани true або false. В даному випадку він буде мати значення true, так як цьому значенню відповідає значення змінної відмінне від нуля.
Внутрішнє представлення змінної bool b в основній пам'яті: 01
2) char ch2 = ‘u’;
Тип char - символьний тип даних, який дозволяє представляти символи у кодуванні за ASCII таблицею. В даному випадку це код символа ‘u’.
Розмір змінної unsigned char ch2 1 байт
Внутрішнє представлення змінної unsigned char ch2 в основній пам'яті: 75
3) unsigned long i5 = 25*352=8800
unsigned long – це беззнаковий чотирьохбайтовий тип даних, в якому значення зберігається у доповняльному коді.
880010 = 0010 0010 0110 00002 = 0000 226016;
Внутрішнє представлення змінної unsigned long i5 в пам'яті комп'ютера: 60 22 00 00
4) double d2 = 300.25e + 12 = 300.25 * 1012 = 300250000000000;
Переведемо число у 16 та 2 СЧ:
30025000000000010 = 111366918040016 ;
111136698040016 =0001 0001 0001 0001 0011 0110 0110 1001 1000 0000 0100 0000 00002;
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
s = 0, бо число додатне.
Доповнимо число нулем:
1 0001 0001 0001 0011 0110 0110 1001 1000 0000 0100 0000 0000,02
Нормалізуємо число:
1, 0001 0001 0001 0011 0110 0110 1001 1000 0000 0100 0000 0000 02 * 10101100
Заокруглення:
1, 0001 0001 0001 0011 0110 0110 1001 1000 0000 0100 0000 0000 | 02
1, 0001 0001 0001 0011 0110 0110 1001 1000 0000 0100 0000 0000 2 * 10101100
Тип double займає ВПК 8 байт (64 біт)
З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.
Знайдемо експоненту е = 102310 + 4410 = 106710 = 42B16 = 010 0001 0111
Зборка за схемою:
1біт
11 біт
52 біта
s
e
m
0
010 0001 0111
1000100010001001101100110100110000000010000000000
100 0010 1111 0001 0001 0001 0011 0110 0110 1001 1000 0000 0100 0000 0000 00002
= 42F11136698040016
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу double зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК (d2) – 00 40 80 69 36 11 F1 4216
Спеціфікація програми
#include<math.h>
#include<stdio.h>
//b,ch2,i5,d2
template<typename T>
void showInMemory(T data) {
unsigned char *vx = (unsigned char *)(&data);
for (int i =0 ; i<sizeof data; i++)
printf("%02X ", vx[i]);
printf("\n");
}
void func(int birthDate, int birthMonth) {
bool b = (bool)((birthDate * 5) % 10 * birthMonth);
unsigned char ch2 = 'u';
unsigned long i5 = (unsigned long)(birthDate * 352);
double d2 = 300.25e+12;
showInMemory(b);
showInMemory(ch2);
showInMemory(i5);
showInMemory(d2);
}
int main(void) {
func(25, 12);
}
Результати виконання програми
/
Висновок: на даній лаборораторній роботі я дослідив внутрішнє представлення в пам’яті комп’ютера даних статичної структури.