Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
/
Звіт
про виконання лабораторної роботи №1
з дисципліни:
“Програмування, частина 3 (Структури даних та алгоритми)”
на тему:“ Внутрішнє представлення в пам’яті комп’ютера статичних даних ”
Мета: дослідження внутрішнього представлення в пам’яті комп’ютера даних статичної структури.
Постановка задачі
Дослідити внутрішнє представлення в пам’яті комп’ютера даних статичної структури.
Змінні, які потрібно проаналізувати :
bool b = (7*5) % 10 * 8 = 28;
signed char ch3 = ‘ n ’;
long i6 = 7*352 = -2464;
long double d2 = Z . X e + Y;
d2 = 56.7e + 8;
де X = 7, Y = 8; //(дата народження 07.08.1999)
Система тестів
1) bool b = (7*5) % 10 * 8=28;
Тип bool - логічний тип даних і у пам’яті комп’ютера він представляється одним байтом. Має два стани true або false. В даному випадку він буде мати значення true, так як цьому значенню відповідає значення змінної відмінне від нуля.
Внутрішнє представлення змінної bool b в основній пам'яті: 01
2) signed char ch3 = ‘n’;
Тип signed char - символьний тип даних, який дозволяє представляти символи у кодуванні за ASCII таблицею. В даному випадку це код символа ‘n’.
Розмір змінної signed char ch3 1 байт
Внутрішнє представлення змінної unsigned char ch3 в основній пам'яті: 6E
3) long i6 = 7*352= -2464
long – це знаковий чотирьохбайтовий тип даних, в якому значення зберігається у доповняльному коді.
-246410 = - 1001 1010 00002 = -9А016; - в прямому коді
в доповняльному -246410 = FF FF FF FF FF FF F6 60;
Внутрішнє представлення змінної long i6 в пам'яті комп'ютера: 60 F6 FF FF FF FF FF FF
4)long double d2 = 56.7e + 8 = 56.7 * 108 = 5670000000;
Переведемо число у 16 та 2 СЧ:
567000000010 = 151F5558016 ;
151F5558016 = 1 0101 0001 1111 0101 0101 0101 1000 00002;
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
s = 0, бо число додатне.
Доповнимо число нулем:
1 0101 0001 1111 0101 0101 0101 1000 0000,02
Нормалізуємо число:
1, 1010 0011 1110 1010 1010 1011 0000 00002 * 10100000
Тип double займає ВПК 8 байт (64 біт)
З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.
Знайдемо експоненту е = 102310 + 3210 = 105510 = 41F16 = 100 0001 1111
Зборка за схемою:
1біт
11 біт
52 біта
s
e
m
0
100 0001 1111
0101 0001 1111 0101 0101 0101 1000 0000 0000 0000 0000 0000 0000
100 0001 1111 0101 0001 1111 0101 0101 0101 1000 0000 0000 0000 0000 0000 00002
= 41F51F555800000016
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу double зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК (d2) – 00 00 00 58 55 1F F5 4116
Спеціфікація програми
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
bool b = 28;
signed char ch3 = 'n';
long i6 = -2464;
double d2 = 56.7e+8;
unsigned char *vx = (unsigned char *)(&b);
printf("Внутрiшнє придставлення змiнної b(bool): ");
for (int i = 0;i<sizeof(b);i++)
{
printf("%02X ", vx[i]);
}
printf("\n");
vx = (unsigned char *)(&ch3);
printf("Внутрiшнє придставлення змiнної ch3(signed char): ");
for (int i = 0;i<sizeof(ch3);i++)
{
printf("%02X ", vx[i]);
}
printf("\n");
vx = (unsigned char *)(&i6);
printf("Внутрiшнє придставлення змiнної i6(long): ");
for (int i = 0;i<sizeof(i6);i++)
{
printf("%02X ", vx[i]);
}
printf("\n");
vx = (unsigned char *)(&d2);
printf("Внутрiшнє придставлення змiнної d2(long double): ");
for (int i = 0;i<sizeof(d2);i++)
{
printf("%02X ", vx[i]);
}
printf("\n");
return 0;
}
Результати виконання програми
/
Висновок: на даній лаборораторній роботі я дослідив внутрішнє представлення в пам’яті комп’ютера даних статичної структури.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!