Представлення статичних данних в пам’яті комп’ютера

Автор: Пользователь скрыл имя, 24 Мая 2013 в 21:41, курсовая работа

Описание работы

Виконуючи цю курсову роботу автор повторив, як визначити внутрішнє представлення цілих, дійсних, логічних та символьних чисел в пам’яті комп’ютера. Також вивчив багато нового про представлення в пам’яті комп’ютера рядків символів, перерахувань, масивів, структур та об’єднань.

Работа содержит 1 файл

Курсова робота_Частина 1.docx

— 184.78 Кб (Скачать)

 

Байти

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 байт

 

  1. float e;

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

 

  1. int c;

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

 

  1. wchar_t a[6];

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


 

  1. АЛГОРИТМ РОЗВ’ЯЗАННЯ ЗАДАЧІ

 

3.1. Словесний опис алгоритму

      Оголошуємо  необхідні змінні. Оголошуємо вказівник  на змінну типу “unsigned char” і присвоюємо їй адресу змінної, яку необхідно прочитати. Побайтно зчитуємо дані з пам’яті і виводимо їх в шіснадцятковій системі численя, також виводимо десяткове значення змінної.

 

3.2. Граф-схема алгоритму


 

 



 

 


 


 

 

 




                                                                                                             Так


 


                                                                                        Ні 


 


 


 

 


 


 


 



 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАММИ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВИСНОВКИ

Виконуючи цю курсову роботу я повторив, як визначити внутрішнє  представлення цілих, дійсних, логічних та символьних чисел в пам’яті  комп’ютера. Також я вивчив багато нового про представлення в пам’яті комп’ютера рядків символів, перерахувань, масивів, структур та об’єднань. 
 

СПИСОК  ЛІТЕРАТУРИ

  1. Лисак Т. А. Основи представлення данних в пам'яті комп'ютера: Конспект лекцій (частина І ) з дисципліни “Програмування. Частина IIІ. Структури даних та алгоритми". – Львів: Видавництво НУ “Львівська політехніка”, 2010 – 37 с.
  2. Конспект лекцій з дисципліни “Програмування. Частина IIІ. Структури даних та алгоритми".
  3. Вирт Н. Алгоритмы + структуры данных = программы: Пер. с англ. – М.:Мир, 1985.-406 с.
  4. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. – М.:Мир, 1989.-360 с.
  5. Кнут Д. Искусство програмирования, том 1. Основные алгоритмы. – М.:Изд.дом ”Вильямс”, 2001. – 720 с.

 

 

 

 

 

 

ДОДАТКИ

Дотаток А

Текст програми до завдання 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!\\n";

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},{0},

{105}},{{61},{42},{105}},{{189},{0},{0}}}};

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;

//--------------------------------------------------------------------------------

}


Информация о работе Представлення статичних данних в пам’яті комп’ютера