Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 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. Ескіз вікна з результатом виконання програми
Висновок: в цій лабораторній роботі я зрозумів принцип представлення чисел в комп’ютері, їхньою структурою та типами. Вдосконалив свої знання про представлення чисел в різних системах числення та типах даних, а також закріпив нові знання щодо мови програмування С++.