Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ
Лабораторна робота №1
"Представлення в пам’яті комп’ютера
цілих та дійсних типів даних"
МЕТА РОБОТИ
Дослідження внутрішнього представлення в пам’яті комп’ютера базових типів даних статичної структури.
Постановка задачі
І. Дослідити внутрішнє представлення в пам’яті комп’ютера цілих та дійсних типів даних.
Int i1=75
Додатнє число 75 типу int в пам'яті комп’ютера зберігається в прямому двійковому коді і займає 4 байти: 7510=4B16=10010112 0000 0000 0000 0000 0000 0000 0100 1011
В пам’яті комп’ютера цілі числа зберігаються у зворотному порядку розміщення байт числа:
0100 1011 0000 0000 0000 0000 0000 0000
Результат в 16-ковій системі числення: 4B 00 00 00.
Int i2= -375
Від'ємне число -375 типу long int в пам'яті комп’ютера зберігається в доповняльному двійковому коді і займає 4 байти: - 37510 = - 18116 = - 0001 0111 01112
0000 0000 0000 0000 0000 0001 0111 0111 - прямий код;
1111 1111 1111 1111 1111 1110 1000 1000 - обернений код;
+ 1
1111 1111 1111 1111 1111 1110 1000 1001 - доповняльний код;
F F F F F E 8 9 - в 16- ковій системі числення
В пам’яті комп’ютера зберігається у зворотному порядку розміщення байт числа:
1000 1001 1111 1110 1111 1111 1111 1111
Результат в 16- ковій системі числення: 89 FE FF FF
Float f1=114.9710
Перевід цілої частини:
114\16=7(залишок 2)
11410=7216
Перевід дробової частини
0,97*16=15.52
0,52*16=8.32
0,32*16=5.12
0,12*16=1.92
0,92*16=14.72
0,9710=F851E16
114.7210=72,F851E 16=0111 0010,1111 1000 0101 0001 1110 2
Нормалізація: 1,11 0010 1111 1000 0101 0001 11102 * 100110
Заокруглення:
1, 11 0010 1111 1000 0101 0001 111
Визначення мантиси: m= 11 0010 1111 1000 0101 0001 111
Визначення зміщеного порядку: е = 12710 + 610 = 13310 = 85 16 = 1000 0101 2
Визначення знакового розряду: s=0 (бо число додатнє).
Зборка за схемою:
s
e
M
0
1000 0101
110 0101 1111 0000 1010 0100
В 16- ковій системі числення: 0100 0010 110 0101 1111 0000 1010 0100
В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа:
1010 0100 1111 0000 1110 0101 0100 0010
A4F0E542
Результат в 16- ковій системі числення: A4F0E542
Float f2= -229.94
Перевід цілої частини:
229\16=14(залишок 5)
22910=E516
Перевід дробової частини:
0,94*16=15.04
0,04*16=0.64
0,64*16=10.24
0,24*16=3.84
-229,9410= -E5,F0A316=1110 0101,1111 0000 1010 00112
Нормалізація: 1.110 0101 1111 0000 1010 00112 * 10111
Визначення мантиси: m=110 0101 1111 0000 1010 0100
Визначення зміщеного порядку: е = 12710 + 710 = 13410 = 86 16 = 1000 0110 2
Визначення знакового розряду: s=1 (бо число від`эмне).
S
e
m
1
1000 0110
110 0101 1111 0000 1010 0100
В 16-й системі числення:1100 0011 0110 0101 1111 0000 1010 0100
В пам’яті комп’ютера
1010 0100 1111 0000 0110 0101 1100 0011
A4F065C3
Результат в 16- ковій системі числення: A4F065C3
5. PЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ :
/
ВИСНОВКИ
На цій лабораторній роботі я дослідив внутрішнє представлення в пам’яті комп’ютера базових типів даних статичної структури. Виконуючи цю лабораторну роботу, я зрозумів як представлені числа пам’яті комп’ютера: в знакових типах лівий біт використовується для зберігання знака числа (0 – плюс, 1 – мінус). Решта бітів містять числове значення. В беззнакових типах всі біти використаються для числового значення. За замовчуванням всі цілочисельні типи вважаються знаковими. Важливим для мене було те, що в пам’яті комп’ютера цілі числа зберігаються у зворотному порядку розміщення байт числа.
ДОДАТКИ
Текст набраної мною програми :
#include<stdio.h>
#include<conio.h>
//using namespace std;
int main (void)
{
//представлення числа і1;
int i1=75;
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=-375;
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=114.97;
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=-229.94;
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;
}