МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІНСТИТУТ КОМП’ЮТЕРНОЇ ТЕХНІКИ АВТОМАТИКИ ТА МЕТРОЛОГІЇ
Кафедра ЕОМ
ЗВІТ ЛАБОРАТОРНОЇ РОБОТИ №2
З ПРЕДМЕТУ: «Програмування. Частина III.
Структури даних та алгоритми»
Львів – 2011
Мета роботи.
Дослідження внутрішнього представлення в пам’яті комп’ютера базових типів даних статичної структури.
Постановка задачі.
І. Дослідити внутрішнє представлення в пам’яті комп’ютера цілих та дійсних типів даних.
Розглянути наступні базові типи даних:
int i1 , і2;
float f1 , f2;
ІІ. Тестування провести для таких значень змінних:
Для надання значень змінним використати одну з літер Прізвища (латинські літери, перша - велика, решта - малі):
i1 = ASCII–код першої літери прізвища;
i2 = i1 * (–5);
f1 – дійсне число: ціла частина – ASCII–код другої літери прізвища,
дробова частина – ASCII–код третьої літери прізвища;
f2 = f1*(–2);
i1=80;
i2=-400;
f1=101.116;
f2= -202.232;
Алгоритм розв’язання задачі.
За індивідуальним завданням я розробила алгоритм розв’язання задачі.
Цей алгоритм був реалізований у програмі, в якій спочатку підключаються потрібні для виконання програми бібліотеки, а саме stdio.h, conio.h, iostream. Після цього ініціалізовані усі потрібні змінні: спочатку змінна і, яка буде використовуватись в циклі, а потім змінні, значення яких задане в індивідуальному завданні. Далі відбувається перетворення типу, за допомогою функції unsigned, перевірка розміру отриманого значення і виведення його на екран.
Система тестів
Представлення змінної і1:
8010=5016
Отже: 80 10 = 5016 = 0000 0000 0000 0000 0000 0000 0101 0000 2
В пам’яті комп’ютера буде відображатись наступним чином:
50 00 00 00.
Представлення змінної і2:
-40010=-19016
Переведення в доповняльний код:
0000 0000 0000 0000 0000 0001 1001 0000
1111 1111 1111 1111 1111 1110 0110 1111
+ 1
1111 1111 1111 1111 1111 1110 0111 0000
1111 1111 1111 1111 1111 1110 0111 00002=FF FF FE 70
Отже: -400 10 = -19016 = 1111 1111 1111 1111 1111 1110 0111 00002
В пам’яті комп’ютера буде відображатись наступним чином:
70 FE FF FF.
Представлення змінної f1.
Перевід цілої частини:
10110=6516
Перевід дробової частини:
0, 116 * 16 =1,856 (110=116)
0, 856 * 16 = 13,696 (1310=D16)
0, 696 * 16 = 11,136 (1110=B16)
0, 136 * 16 = 2,176 (210=216)
0, 176 * 16 = 2,816 (210=216)
=> 0,116 10 = 0,1DB2216
Отже: 101,116 10 = 65, 1DB22 16 = 0110 0101, 0001 1101 1011 0010 0010 2
Нормалізація: 01,10 0101 0001 1101 1011 0010 0010 2 * 100110
Заокруглення:
1,10 0101 0001 1101 1011 00100 │010
+ 0
1,10 0101 0001 1101 1011 00100
Визначення мантиси: m= 10 0101 0001 1101 1011 00100
Визначення зміщеного порядку: е = 12710 + 610 = 133 10 = 85 16 = 1000 0101 2
В 16- ковій системі числення: 0100 0010 1100 1010 0011 1011 0110 0100 2= 42 CA 3B 6416
В пам’яті комп’ютера буде відображатись наступним чином:
64 3B CA 42.
Представлення змінної f2:
Перевід цілої частини:
-20210=-CA16
Перевід дробової частини:
0, 232 * 16 =3,712 (310 = 316)
0, 712 * 16 = 11,392 (1110 = B16)
0, 392 * 16 = 6,272 (610 = 616)
0, 272 * 16 = 4,352 (410 = 416)
0, 352 * 16 = 5,632 (510=516)
=> 0,232 10 = 0,3B64516
Отже: -202,23210 = -CA,3B64516 = 1100 1010, 0011 1011 0110 0100 01012
Нормалізація: 1,100 1010 0011 1011 0110 0100 0101 2 * 100111
Заокруглення:
1,100 1010 0011 1011 0110 0100 │0101
+ 0
1,100 1010 0011 1011 0110 0100
Визначення мантиси: m=100 1010 0011 1011 0110 0100
Визначення зміщеного порядку: е = 12710 + 710 = 134 10 = 86 16 = 1000 0110 2
В 16- ковій системі числення: 1100 0011 0100 1010 0011 1011 0110 0100 2= C3 4A 3B 6416
В пам’яті комп’ютера буде відображатись наступним чином:
B 4A C3.
Результати виконання програми.
/
Висновки.
Виконавши дану лабораторну роботу, я навчилася досліджувати внутрішнє представлення в пам’яті комп’ютера базових типів даних статичної структури.
Додатки.
#include<stdio.h>
#include<conio.h>
#include <iostream>
int main (void)
{
int i;
int i1=80;
int i2=-400;
float f1 = 101.116;
float f2 = -202.232;
unsigned char *vi1=(unsigned char *)(&i1);
for ( i=0;i<sizeof(i1);i++)
printf("%02X ",vi1[i]);
printf("\n");
unsigned char *vi2=(unsigned char *)(&i2);
for (i=0;i<sizeof(i2);i++)
printf("%02X ",vi2[i]);
printf("\n");
unsigned char *vf1=(unsigned char *)(&f1);
for (i=0;i<sizeof(f1);i++)
printf("%02X ",vf1[i]);
printf("\n");
unsigned char *vf2=(unsigned char *)(&f2);
for (i=0;i<sizeof(f2);i++)
printf("%02X ",vf2[i]);
printf("\n");
getch();
return 0;
}