МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ
Лабораторна робота №1
"Представлення в пам’яті комп’ютера
цілих та дійсних типів даних"
МЕТА РОБОТИ
Дослідження внутрішнього представлення в пам’яті комп’ютера базових типів даних статичної структури.
Постановка задачі
І. Дослідити внутрішнє представлення в пам’яті комп’ютера цілих та дійсних типів даних.
Int i1=75
Додатнє число 75 типу int в пам'яті комп’ютера зберігається в прямому двійковому коді і займає 4 байти: 7510=4B16=10010112 0000 0000 0000 0000 0000 0000 0100 1101
В пам’яті комп’ютера цілі числа зберігаються у зворотному порядку розміщення байт числа:
0100 1101 0000 0000 0000 0000 0000 0000
Результат в 16-ковій системі числення: 4D 00 00 00.
Int i2= -385
Від'ємне число -385 типу long int в пам'яті комп’ютера зберігається в доповняльному двійковому коді і займає 4 байти: - 38510 = - 18116 = - 0001 1000 00012
0000 0000 0000 0000 0000 0001 1000 0001 - прямий код;
1111 1111 1111 1111 1111 1110 0111 1110 - обернений код;
+ 1
1111 1111 1111 1111 1111 1110 0111 1111 - доповняльний код;
F F F F F E 7 F - в 16- ковій системі числення
В пам’яті комп’ютера зберігається у зворотному порядку розміщення байт числа:
0111 1111 1111 1110 1111 1111 1111 1111
Результат в 16- ковій системі числення: 7F FE FF FF
Float f1=97.11710
Перевід цілої частини:
97\16=6(залишок 1)
9710=6116
Перевід дробової частини
0,117*16=1,872
0,872*16=13,952
0,952*16=15,232
0,232*16=3,712
0,712*16=11,392
0,11710=1DF3B16
97.11710=61,1DF3B 16=0101 0001, 0001 1101 1111 0011 10112
Нормалізація: 1,01 0001 0001 1101 1111 0011 10112 * 100110
Заокруглення:
1, 01 0001 0001 1101 1111 0011 1 | 11
+ 1
1, 01 0001 0001 1101 1111 0011 1
Визначення мантиси: m= 01 0001 0001 1101 1111 0011 1
Визначення зміщеного порядку: е = 12710 + 610 = 13310 = 85 16 = 1000 0101 2
Визначення знакового розряду: s=0 (бо число додатнє).
Зборка за схемою:
s
e
M
0
1000 0101
01 0001 0001 1101 1111 0011 1
В 16- ковій системі числення: 0100 0010 1010 0010 0011 1011 1110 0111
В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа:
1110 0111 0011 1011 1010 0010 0100 0010
E7 3B A2 42
Результат в 16- ковій системі числення: E7 3B A2 42
Float f2= -194,234
Перевід цілої частини:
194\16=12(залишок 2)
19410=C216
Перевід дробової частини:
0,234*16=3,744
0,744*16=11,904
0,904*16=14,464
0,464*16=7,424
-194, 23410= -C2,3BE716=1100 0010, 0011 1011 1110 01112
Нормалізація: 1.100 0010 0011 1011 1110 01112 * 100111
Визначення зміщеного порядку: е = 12710 + 710 = 13410 = 86 16 = 1000 0110 2
Визначення знакового розряду: s=1 (бо число від`эмне).
S
e
m
1
1000 0110
100 0010 0011 1011 1110 0111
В 16-й системі числення:1100 0011 0100 0010 0011 1011 1110 0111
В пам’яті комп’ютера
1110 0111 0011 1011 0100 0010 1100 0011
E7 3B 42 C2
5. PЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ :
/
ВИСНОВКИ
На цій лабораторній роботі я дослідив внутрішнє представлення в пам’яті комп’ютера базових типів даних статичної структури. Виконуючи цю лабораторну роботу, я зрозумів як представлені числа пам’яті комп’ютера: в знакових типах лівий біт використовується для зберігання знака числа (0 – плюс, 1 – мінус). Решта бітів містять числове значення. В беззнакових типах всі біти використаються для числового значення. За замовчуванням всі цілочисельні типи вважаються знаковими. Важливим для мене було те, що в пам’яті комп’ютера цілі числа зберігаються у зворотному порядку розміщення байт числа.
ДОДАТКИ
Текст набраної мною програми :
#include<stdio.h>
#include<conio.h>
//using namespace std;
int main (void)
{
//представлення числа і1;
int i1=77;
unsigned char *vi1=(unsigned char *)(&i1);//посилання на число
printf("\ni1= ");
for (int i=0;i<sizeof(i1);i++)
printf("%02X ",vi1[i]); //вивід числа і1;
printf("\n\n");
//представлення числа і2;
int i2=-385;
unsigned char *vi2=(unsigned char *)(&i2); //посилання на число
printf("i2= ");
for (int i=0;i<sizeof(i2);i++) //вивід числа і2;
printf("%02X ",vi2[i]);
printf("\n\n");
//представлення числа f1;
float f1=97.117;
unsigned char *vf1=(unsigned char *)(&f1); //посилання на число
printf("f1= ");
for (int i=0;i<sizeof(f1);i++) //вивід числа f1;
printf("%02X ",vf1[i]);
printf("\n\n");
//представлення числа f2;
float f2=-194.234;
unsigned char *vf2=(unsigned char *)(&f2); //посилання на число
printf("f2= ");
for (int i=0;i<sizeof(f2);i++) //вивід числа f2;
printf("%02X ",vf2[i]);
printf("\n");
getch();
return 0;
}