Автор: Пользователь скрыл имя, 24 Мая 2013 в 21:41, курсовая работа
Виконуючи цю курсову роботу автор повторив, як визначити внутрішнє представлення цілих, дійсних, логічних та символьних чисел в пам’яті комп’ютера. Також вивчив багато нового про представлення в пам’яті комп’ютера рядків символів, перерахувань, масивів, структур та об’єднань.
Байти |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
Заповнення |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
На даному етапі ВПК об’єднання заповнене 20-ма однаковими байтами СС, оскільки воно ще пусте. Виконую надання значень елементам об’єднання.
ВПК 1 структура в об’єднанні знаходиться з 0-го по 19 байт
ВПК 2 структура в об’єднанні знаходиться з 0-го по 8 байт
un.e = 42199;
Переведем число у 16 та 2 СЧ:
4219910 = A4 D716 = 1010 0100 1101 01112
Тип float займає ВПК 4 байт (32 біт)
З них 8 біт виділяється під експоненту, 1 біт під знак числа і решта 23 під мантису.
Необхідно визначити значення m (мантиса), s(знак) та e(експонента).
s = 0, бо число додатне.
1010 0100 1101 0111,02
Нормалізуємо число:
1,0100 1001 1010 11102*101111
Знайдемо експоненту е = 12710 + 1510 = 14210 = 8E16 = 1000 11102
Знайдемо мантису m:
Для знаходження мантиси доповнимо число 1, 0100 1001 1010 1110 нулями до 23 біт після коми:
m = 1, 0100 1001 1010 1110 0000 000
Зборка за схемою:
1біт |
8 біт |
23 біта |
s |
e |
m |
0 |
1000 1110 |
0100 1001 1010 1110 0000 000 |
0100 0111 0010 0100 1101 0111 0000 00002 = 4E 24 D7 0016
Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу float зберігаються у зворотньому порядку розміщення байт числа.
Отже, ВПК е: 00 D7 24 4E16
ВПК 2 структури: СС СС СС СС CC 00 D7 24 4E16 //змінній e не надається ніякого значення
Звідси ВПК об’єднання з 0-го по 19 байт:
СС СС СС СС CC 00 D7 24 4E СС СС СС СС CC CC CC CC CC CC CC16
un.c = 65100;
Переведем число у 16:
6510010 = FE 4C16
Отже, ВПК с: 4C FE 00 0016
Звідси ВПК об’єднання з 0-го по 19 байт:
4C FE 00 00 CC CC CC CC СС СС СС СС CC CC CC CC CC CC CC 16
a[0] = ‘5’; // ВПК: 35 00
Звідси ВПК об’єднання з 0-го по 19 байт:
4C FE 00 00 CC CC CC CC 35 00 СС СС CC CC CC CC CC CC CC CC 16
a[1] = ‘3’; // ВПК: 33 00
Звідси ВПК об’єднання з 0-го по 19 байт:
4C FE 00 00 CC CC CC CC 35 00 33 00 CC CC CC CC CC CC CC CC 16
a[2] = ‘2’; // ВПК: 32 00
Звідси ВПК об’єднання з 0-го по 19 байт:
4C FE 00 00 CC CC CC CC 35 00 33 00 32 00 CC CC CC CC CC CC 16
a[3] = ‘5’; // ВПК: 35 00
Звідси ВПК об’єднання з 0-го по 19 байт:
4C FE 00 00 CC CC CC CC 35 00 33 00 32 00 35 00 CC CC CC CC 16
a[4] = ‘9’; // ВПК: 39 00
Звідси ВПК об’єднання з 0-го по 19 байт:
4C FE 00 00 CC CC CC CC 35 00 33 00 32 00 35 00 39 00 CC CC 16
Остаточне представлення об’єднання ВПК:
Байти |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Заповнення |
4C |
FE |
00 |
00 |
CC |
CC |
CC |
CC |
35 |
00 |
Байти |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
Заповнення |
33 |
00 |
32 |
00 |
35 |
00 |
39 |
00 |
CC |
CC |
3.1. Словесний опис алгоритму
Оголошуємо необхідні змінні. Оголошуємо вказівник на змінну типу “unsigned char” і присвоюємо їй адресу змінної, яку необхідно прочитати. Побайтно зчитуємо дані з пам’яті і виводимо їх в шіснадцятковій системі численя, також виводимо десяткове значення змінної.
3.2. Граф-схема алгоритму
ВИСНОВКИ
Виконуючи цю курсову роботу
я повторив, як визначити внутрішнє
представлення цілих, дійсних, логічних
та символьних чисел в пам’яті
комп’ютера. Також я вивчив багато
нового про представлення в пам’яті комп’ютера
рядків символів, перерахувань, масивів,
структур та об’єднань.
СПИСОК ЛІТЕРАТУРИ
ДОДАТКИ
Дотаток А
Текст програми до завдання 1 і 2
#include <stdio.h>
#include <iostream>
#include <locale>
#include <windows.h>
using namespace std;
void main()
{
setlocale(LC_CTYPE,"Russian");
//----------------------------
cout<<"\tЗавдання №1\n";
//----------------------------
cout<<"1.1 Логiчний тип: "<<endl;
bool b = 1;
unsigned char *bb=(unsigned char *)(&b);
for(int i=0;i<sizeof(b);i++) printf("%02X ",bb[i]);
cout<<endl;
//----------------------------
//----------------------------
cout<<"1.2 Символьний тип: "<<endl;
char ch1 = 'G';
unsigned char *chh1=(unsigned char *)(&ch1);
for(int i=0;i<sizeof(ch1);i++) printf("%02X ",chh1[i]);
cout<<endl;
//----------------------------
//----------------------------
cout<<"1.3 Цiлий тип: "<<endl;
unsigned short i1 = 2625;
unsigned char *ii1=(unsigned char *)(&i1);
for(int i=0;i<sizeof(i1);i++) printf("%02X ",ii1[i]);
cout<<endl;
//----------------------------
//----------------------------
cout<<"1.4 Дiйсний тип: "<<endl;
float d1 = -10521000;
unsigned char *dd1=(unsigned char *)(&d1);
for(int i=0;i<sizeof(d1);i++) printf("%02X ",dd1[i]);
cout<<"\n"<<endl;
//----------------------------
cout<<"\tЗавдання №2\n";
//----------------------------
cout<<"2.1 Рядок символiв: "<<endl;
char string26[] = "\x22\33\x4\\vv\\\\bnn\n57!\\
string26[0]='6';
string26[2]='6';
string26[4]='0';
string26[6]='5';
string26[8]='3';
string26[10]='2';
string26[12]='5';
string26[14]='9';
for(int i=0;i<18;i++) printf("%02X ",string26[i]);
cout<<endl;
//----------------------------
//----------------------------
cout<<"2.2 Представлення перерахувань: "<<endl;
enum color12 {
BLUE,
GREEN,
CYAN = 0,
RED,
BROWN,
GRAY,
YELLOW = 8,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
cout<<"Змiнна с1"<<endl;
unsigned char *cc1=(unsigned char *)(&c1);
for(int i=0;i<sizeof(c1);i++) printf("%02X ",cc1[i]);
cout<<endl;
cout<<"Змiнна с2"<<endl;
unsigned char *cc2=(unsigned char *)(&c2);
for(int i=0;i<sizeof(c2);i++) printf("%02X ",cc2[i]);
cout<<endl;
cout<<"Змiнна с3"<<endl;
unsigned char *cc3=(unsigned char *)(&c3);
for(int i=0;i<sizeof(c3);i++) printf("%02X ",cc3[i]);
cout<<endl;
//----------------------------
//----------------------------
cout<<"2.3 Представлення масивiв: "<<endl;
char array25[][4][3] ={{{{0},{126},{126}},{{126},{
{105}},{{61},{42},{105}},{{
unsigned char *ar1=(unsigned char *)(&array25);
for(int i=0;i<sizeof(array25);i++) printf("%02X ",ar1[i]);
cout<<endl;
//----------------------------
//----------------------------
cout<<"2.4 Представлення структур: "<<endl;
struct str25 {
int b:4;
long d;
char c[9];
unsigned :0;
unsigned long e : 13;
long double a;
char f;
}str;
str.a = 21.105;
str.b = 3224;
str.c[0] = 'G';
str.c[1] = 'a';
str.c[2] = 'z';
str.c[3] = 'd';
str.c[4] = 'a';
str.d = 0;
str.e = 3780;
str.f = '9';
unsigned char *struct1=(unsigned char *)(&str);
for(int i=0;i<sizeof(str);i++) printf("%02X ",struct1[i]);
cout<<endl;
//----------------------------
//----------------------------
cout<<"2.5 Представлення об'єднань: "<<endl;
union un7 {
int b;
struct {
float f[2];
wchar_t a[6];
};
struct {
char d[5];
float e;
};
int c;
} un;
un.e = 42199;
un.c = 65100;
un.a[0] = '5';
un.a[1] = '3';
un.a[2] = '2';
un.a[3] = '5';
un.a[4] = '9';
unsigned char *un1=(unsigned char *)(&un);
for(int i=0;i<sizeof(un);i++) printf("%02X ",un1[i]);
cout<<endl;
//----------------------------
}
Информация о работе Представлення статичних данних в пам’яті комп’ютера