Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 1
на тему:
"Представлення в пам’яті комп’ютера
даних цілих та дійсних типів"
з дисципліни:
" Програмування. Частина III. Структури даних та алгоритми "
Вибір індивідуального завдання:
i1 = Рr1 = №(G) = 86
i2 = i1 * (–5) = –485
f1 = рr2 . рr3 = №(r) . №(o) = 97 . 115
f2 = f1*(–3) = –291 . 945
Мета роботи
Дослідження внутрішнього представлення в пам’яті комп’ютера (ВПК) статичних даних базових типів.
Постановка задачі
Дослідити внутрішнє представлення в пам’яті комп’ютера даних цілих та дійсних типів.
Розглянути наступні базові типи даних:
int i1 , і2;
float f1 , f2;
Система тестів
Представлення ВПК змінної i1 = 86
Додатнє число 86 типу int в пам'яті комп’ютера зберігається в прямому двійковому коді і займає 4 байти: → 0000 0000 0000 0000 0000 0000 0101 0110
В пам’яті комп’ютера цілі числа зберігаються у зворотному порядку розміщення байт числа:
0101 0110 0000 0000 0000 0000 0000 0000
Результат в 16-ковій системі числення: 56 00 00 00.
Представлення ВПК змінної i2 = -485
Від'ємне число -485 типу long int в пам'яті комп’ютера зберігається в доповняльному двійковому коді і займає 4 байти: - 48510 = - 1E516 = - 0001 1110 01012
0000 0000 0000 0000 0000 0001 1010 0101 - прямий код;
1111 1111 1111 1111 1111 1110 0001 1010 - обернений код;
+ 1
1111 1111 1111 1111 1111 1110 0001 1011 - доповняльний код;
F F F F F E 1 B - в 16- ковій системі числення
В пам’яті комп’ютера зберігається у зворотному порядку розміщення байт числа:
0001 1011 1111 1110 1111 1111 1111 1111
Результат в 16- ковій системі числення: 1B FE FF FF.
Представлення ВПК змінної f1 = 97.115
Розглянемо, як в пам'яті комп’ютера зберігається додатнє число 97.115 типу float .
Перевід цілої частини: 97 10 = 6116
Перевід дробової частини:
0, 115 * 16 = 1,84
0, 84 * 16 = 13,44 (1310 = D16)
0, 44 * 16 = 7,04
=> 0,115 10 = 0,1D7 16
Отже: 97,115 10 = 61,1D7 16 = 0110 0001, 0001 1101 0111 2
Нормалізація: 01 , 10 0001 0001 1101 01112 * 10110
Заокруглення:
1 , 10 0001 0001 1101 0111 0000 │1
+ 1
1 , 10 0001 0001 1101 0111 0000 1
Визначення мантиси: m= 10 0001 0001 1101 0111 0000 1
Визначення зміщеного порядку: е = 12710 + 610 = 133 10 = 85 16 = 1000 0101 2
Інший спосіб: 12710 = 111 1111 2
+ 0110
1000 0101 2
Визначення знакового розряду: s=0 (бо число додатнє).
Схема внутрішнього представлення:
s
e
m
1 біт
8 біт
23 біт
Зборка за схемою:
s
e
m
0
1000 0101
10 0001 0001 1101 0111 0000 1
В 16- ковій системі числення: 0100 0010 1100 0010 0011 1010 1110 0001 2= 42 C2 3A E1 16
В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа:
1110 0001 0011 1010 1100 0010 0100 0010
Результат в 16- ковій системі числення: E1 3A C2 42
Представлення ВПК змінної f2 = -291.945
Розглянемо, як в пам'яті комп’ютера зберігається від'ємне число -291.945 типу float .
Різниця з попереднім прикладом буде полягати тільки у представленні знакового розряду.
Визначення знакового розряду: s=1 (бо число від'ємне).
Зборка за схемою (відміну від попереднього прикладу будемо виділяти жирним шріфтом):
s
e
m
1
1000 0111
0010 0011 1111 0001 1110 110
В 16- ковій системі числення: 1100 0011 1001 0001 1111 1000 1111 01102 = C3 91 F8 F616
В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа:
1111 0110 1111 1000 1001 0001 1100 0011
Результат в 16- ковій системі числення: F6 F8 91 C3
Алгоритм розв’язання задачі
#include<stdio.h>
#include<conio.h>
void main (void){
float f1, f2;
int i1, i2;
i1 = 86;
i2 = -485;
f1 = 97.115;
f2 = -291.945;
{
unsigned char *vx=(unsigned char *)(&i1);
printf("i1 = ");
for (int i=0;i<sizeof(i1);i++)
printf("%02X ",vx[i]);
printf("\n");
}
{
unsigned char *vx=(unsigned char *)(&i2);
printf("i2 = ");
for (int i=0;i<sizeof(i2);i++)
printf("%02X ",vx[i]);
printf("\n");
}
{
unsigned char *vx=(unsigned char *)(&f1);
printf("f1 = ");
for (int i=0;i<sizeof(f1);i++)
printf("%02X ",vx[i]);
printf("\n");
}
{
unsigned char *vx=(unsigned char *)(&f2);
printf("f2 = ");
for (int i=0;i<sizeof(f2);i++)
printf("%02X ",vx[i]);
printf("\n");
}
}
Результати виконання програми
Висновки
Виконуючи цю лабораторну роботу я досліджував внутрішнє представлення в пам’яті комп’ютера (ВПК) статичних даних базових типів.