МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ
Лабораторна робота № 1
"Представлення в пам’яті комп’ютера
цілих та дійсних типів даних"
Виконав ст. гр. КІ-21
Сможаник Л. І.
Принав старший викладач
Матвійчук Т. А.
Львів – 2011
Мета роботи
Дослідження внутрішнього представлення в пам’яті комп’ютера базових типів даних статичної структури.
Постановка задачі
І. Дослідити внутрішнє представлення в пам’яті комп’ютера цілих та дійсних типів даних.
Розглянути наступні базові типи даних:
int i1 , і2;
float f1 , f2;
ІІ. Тестування провести для таких значень змінних:
i1 =83;
i2 = i1 * (–5)=−415;
f1=109.1111;
f2 = f1*(–2)=−218.222;
Система тестів
Представлення змінної і1:
8310=5316
Отже: 8310=5316= 0000 0000 0000 0000 0000 0000 0101 0011 2
В пам’яті комп’ютера буде відображатись наступним чином: 53 00 00 00.
Представлення змінної і2:
−41510=−19F16
Переведення в доповняльний код:
0000 0000 0000 0000 0000 0001 1001 1111
1111 1111 1111 1111 1111 1110 0110 0000
+ 1
1111 1111 1111 1111 1111 1110 0110 0001
1111 1111 1111 1111 1111 1110 0110 00012= FF FF FE 6116
Отже: −41510=−19F16 => 1111 1111 1111 1111 1111 1110 0110 00012
В пам’яті комп’ютера буде відображатись наступним чином:
61 FE FF FF.
Представлення змінної f1.
Перевід цілої частини:
10910=6D16
Перевід дробової частини:
0, 111 * 16 =1,776
0, 776 * 16 = 12,416 (1210 = C16)
0, 416 * 16 = 6,656
0, 656 * 16 = 10,496 (1010 = A16)
0,496 * 16= 7,936
=> 0, 111 10 = 0,1C6A716
Отже: 109,11110 = 6D,1C6A7 16 = 0110 1101, 0001 1100 0110 1010 01112
Нормалізація: 01,10 1101 0001 1100 0110 1010 01112* 100110
Заокруглення:
1, 10 1101 0001 1100 0110 1010 0│111
+ 1
1, 10 1101 0001 1100 0110 1010 1
Визначення мантиси: m=10 1101 0001 1100 0110 1010 1
Визначення зміщеного порядку: е = 12710 + 610 = 133 10 = 85 16 = 1000 0101 2
В 16- ковій системі числення: 0100 0010 1101 1010 0011 1000 1101 01012= 42 DA 38 D516
В пам’яті комп’ютера буде відображатись наступним чином:
D5 38 DA 42.
Представлення змінної f2:
Перевід цілої частини:
−21810=−DA16
Перевід дробової частини:
0, 222 * 16 =3,552
0, 552 * 16 = 8,832
0, 832 * 16 = 13,312 (1310 = D16)
0, 312 * 16 = 4,992
0,992 * 16 = 15,872 (1510 = F16)
=> 0,222 10 = 0,38D4F16
Отже: −218,22210 = −DA,38D4F16
У 2-вій системі числення це число матиме вигляд: 1101 1010,0011 1000 1101 0100 11112
Нормалізація: 1,101 10100011 1000 1101 0100 11112 * 100111
Заокруглення:
1,101 10100011 1000 1101 0100 │1111
+ 1
1,101 10100011 1000 1101 0101
Визначення мантиси: m=101 10100011 1000 1101 0101
Визначення зміщеного порядку: е = 12710 + 710 = 134 10 = 86 16 = 1000 0110 2
16- ковій системі числення:1100 0011 0101 1010 0011 1000 1101 01012= C3 5A 38 D416
В пам’яті комп’ютера буде відображатись наступним чином:
D4 38 5A C3.
Алгоритм розв’язання задачі
На цій лабораторній роботі ми повинні показати представлення в пам’яті комп’ютера цілих та дійсних типів даних,з якими працює наша програма. Алгоритм полягає у впорядкованому зчитуванні байтів збережених у памяті комп’ютера, за допомогою вказівників та посилань.
Для рикладу роглянем тип float:
В пам'яті комп'ютера змінна типу float займає 4 байти, в яких один біт виділяється під знак, 8 – під порядок, 23 – під мантису.
Переводим цілу і дробову частини частини:
10910=6D16
0, 111 * 16 =1,776
0, 776 * 16 = 12,416 (1210 = C16)
0, 416 * 16 = 6,656
0, 656 * 16 = 10,496 (1010 = A16)
0,496 * 16= 7,936
=> 0, 111 10 = 0,1C6A716
Отже: 109,11110 = 6D,1C6A7 16 = 0110 1101, 0001 1100 0110 1010 01112
Робиться нормалізація: 01,10 1101 0001 1100 0110 1010 01112* 100110
Заокруглення:
1, 10 1101 0001 1100 0110 1010 0│111
+ 1
1, 10 1101 0001 1100 0110 1010 1
Визначається мантиса: m=10 1101 0001 1100 0110 1010 1
Визначається зміщений порядок: е = 12710 + 610 = 133 10 = 85 16 = 1000 0101 2
В 16- ковій системі числення: 0100 0010 1101 1010 0011 1000 1101 01012= 42 DA 38 D516
А в пам’яті комп’ютера буде відображатись наступним чином:
D5 38 DA 42.
Код програми яка це реалізує:
#include<stdio.h>
#include<conio.h>
int main (void)
{
float f1=109.111;
unsigned char *vf1=(unsigned char *)(&f1);
for (int i=0; i<sizeof(f1); i++)
printf("%02X ", vf1[i]);
printf("\n\n");
getch();
return 0;
}
Результати виконання програми.
/
Висновок.
У цій лабораторній роботі ми розглядали представлення даних у пам’яті комп’ютера на прикладі типу int та float і з’ясували що вони представлені у 16-ій або 2-ій системах числення. В залежності від типу відводиться відповідна пам'ять у байтах. У кожному біті байта зберігається певна інформація числа.