Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 1
на тему:
"Представлення в пам’яті комп’ютера
даних цілих та дійсних типів"
з дисципліни:
" Програмування. Частина III. Структури даних та алгоритми "
Вибір індивідуального завдання:
i1 = Рr1 = №(С) = 67
i2 = i1 * (–5) = –335
f1 = рr2 .рr3 = №(h) . №(a) = 97 . 104
f2 = f1*(–3) = –291,312
Вибір індивідуального завдання:
i1 = Рr1 = №(F) = 70
i2 = i1 * (–5) = –350
f1 = рr2 .рr3 = №(r) . №(r) = 114 . 101
f2 = f1*(–3) = –342,303
Мета роботи:
Дослідження внутрішнього представлення в пам’яті комп’ютера(ВПК) статичних даних базових типів.
Постановка задачі:
Дослідити внутрішнє представлення в пам’яті комп’ютера даних цілих та дійсних типів. Розглянутинаступнібазовітипи даних:
inti1,і2;
floatf1 , f2;
Система тестів:
Представлення ВПК змінної i1 = 67
Додатнє число 67 типу int в пам'яті комп’ютера зберігається в прямому двійковому коді і займає 4 байти: → 0000 0000 0000 0000 0000 0000 0100 0110
В пам’ятікомп’ютерацілі числа зберігаються у зворотному порядку розміщення байт числа:
0110 0010 0000 0000 0000 0000 0000 0000
Результат в 16-ковій системічислення: 46 00 00 00.
Представлення ВПК змінної i2 = -350
Від'ємне число -350 типу longint в пам'яті комп’ютера зберігається в доповняльному двійковому коді і займає 4 байти: -35010 = - 15E16 = - 1010111102
0000 0000 0000 0000 0000 0001 0101 1110 - прямий код;
1111 1111 1111 1111 1111 1110 1010 0001 - обернений код;
+ 1
1111 1111 1111 1111 1111 1110 1010 0010 - доповняльний код;
F F F F F E A 2 - в 16- ковій системі числення
В пам’ятікомп’ютеразберігається у зворотному порядку розміщення байт числа:
1010 0100 0111 1111 1111 1111 1111 1111
Результат в 16- ковій системі числення: A2 FE FF FF.
Представлення ВПК змінної f1 = 114 . 101
Розглянемо, як в пам'яті комп’ютера зберігається додатнє число 114. 101 типу float.
Перевід цілої частини: 11410= 07216
Перевід дробової частини:
0.101*16 = 1.616 ( 1)0.616*16 = 9.856 ( 9)0.856*16 = 13.696 (13)0.696*16 = 11.136 ( 11)
=>0, 10110= 0, 19DB16
Отже114 . 10110=72, 19DB 16=0111 0010, 0001 1001 1101 10112
Нормалізація: 01,11 0010 0001 1001 1101 10112*10110
Визначеннямантиси: m=0
Визначеннязміщеногопорядку: е = 12710 + 610= 13310= 8516= 100001012
Інший спосіб: 12710= 111 1111 2
+ 0110
1000 01012
Визначення знакового розряду: s=0 (бо число додатнє).
Схема внутрішньогопредставлення:
s
e
m
1 біт
8 біт
23біт
Зборка за схемою:
s
e
m
0
100 0010 1
110 0100 0011 0011 1011 0110
В 16- ковійсистемічислення: 0100 0010 1110 0100 0011 0011 1011 01102= 42E433B616
В пам’ятікомп’ютера буде зберігатися у зворотному порядкурозміщення байт числа:
0110 1011 0011 0011 0100 110 0010 0100
Результат в 16- ковійсистемічислення: B6 33 E4 42
Представлення ВПК змінної f2 = -–342,303
Розглянемо, як в пам'яті комп’ютера зберігається від'ємне число –342,303типу float.
Перевідцілоїчастини: 34210= 15616
Перевіддробовоїчастини:
0.303*16 = 4.848 (4)0.848*16 = 13.568 (13)0.568*16 = 9.088 (9)0.087999999999999*16 = 1.408 ( 1)
=>0,30310= 0, 4D9116
Отже: -342,30310=156, 4D9116= -0001 0101 0110, 0100 1101 1001 00012
Нормалізація: 0001 , 0101 0110 0100 1101 1001 00012*101000
Заокруглення: 0101 0110 0100 1101 1001 001
Визначеннямантиси: m=0101 0110 0100 1101 1001 000
Визначеннязміщеногопорядку: е = 12710 + 810= 13510= 8716= 100001112
Інший спосіб: 12710= 111 1111 2
+ 1000
1000 01112
Визначення знакового розряду: s=1(бо число від'ємне).
Схема внутрішньогопредставлення:
s
e
m
1 біт
8 біт
23біт
Зборка за схемою:
s
e
m
1
1000 0111
0101 0110 0100 1101 1001 001
В 16- ковійсистемічислення: 1100 0011 1010 1011 0010 0110 1100 10002= C3 AB 26 C916
В пам’ятікомп’ютера буде зберігатися у зворотному порядкурозміщення байт числа:
1000 1100 0110 0010 1000 1010 0011 1100
Результат в 16- ковійсистемічислення: C9 26 AB C3
Алгоритм розв’язання задачі:
#include<stdio.h>
#include<conio.h>
voidmain (void)
{
float f1, f2;
int i1, i2;
i1 = 70;
i2 = -350;
f1 = 114.101;
f2 = -342.303;
{
unsignedchar *vx=(unsignedchar *)(&i1);
printf("i1 = ");
for (int i=0;i<sizeof(i1);i++)
printf("%02X ",vx[i]);
printf("\n");
}
{
unsignedchar *vx=(unsignedchar *)(&i2);
printf("i2 = ");
for (int i=0;i<sizeof(i2);i++)
printf("%02X ",vx[i]);
printf("\n");
}
{
unsignedchar *vx=(unsignedchar *)(&f1);
printf("f1 = ");
for (int i=0;i<sizeof(f1);i++)
printf("%02X ",vx[i]);
printf("\n");
}
{
unsignedchar *vx=(unsignedchar *)(&f2);
printf("f2 = ");
for (int i=0;i<sizeof(f2);i++)
printf("%02X ",vx[i]);
printf("\n");
}
}
Результат виконання програми:
Рис1. Ескіз вікна з результатом виконання програми
Висновок: в цій лабораторній роботі я зрозумів принцип представлення чисел в комп’ютері, їхньою структурою та типами. Вдосконалив свої знання про представлення чисел в різних системах числення та типах даних, а також закріпив нові знання щодо мови програмування С++.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!