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

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

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

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

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

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

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

 

Отже в результаті переприсвоєння рядок набуває наступного вигляду:

char *string26 = "6\336\\0v5\\3n2\n5795n";

 

Отже ВПК рядок символів – "6\336\\0v5\\3n2\n5795n":

36 1B 36 5C 30 76 35 5C 33 6E 32 0A 35 37 39 5C 6A16 + термінальний нуль 0016

 

ВПК(string18): 36 1B 36 5C 30 76 35 5C 33 6E 32 0A 35 37 39 5C 6A16 + термінальний нуль 0016

 

 

 

 

 

 

2.2.2. Представлення перерахувань в пам’яті комп’ютера.

 

enum color12 {

BLUE,   // 0, бо не визначено (немає присвоєння значення змінній BLUE)

GREEN,      // 1, (оскільки невизначено, то GREEN = BLUE + 1)

CYAN = 0,   // 0, бо вказано (змінній CYAN присвоєно значення 0)

RED,   // 1, (оскільки невизначено, то RED = CYAN + 1)

BROWN,   // 2, (оскільки невизначено, то BROWN = RED + 1)

GRAY,        // 3, (оскільки невизначено. то змінній GRAY = BROWN +1)

YELLOW = 8,  // 8, бо вказано (змінній YELLOW присвоєно значення 8)

WHІTE,   // 9, (оскільки невизначено, то WHITE = YELLOW + 1)

MAGENTA,              // 10, (оскільки невизначено, то MAGENTA = WHITE + 1)

LІGHTGRAY,  // 11, (оскільки невизначено, то LIGHTGRAY = MAGENTA + 1)

DARKGRAY,  // 12, (оскільки невизначено, то DARKGRAY=LIGHGRAY+1)

BLACK   // 13, (оскільки невизначено, то BLACK = DARKGRAY + 1)

}

   c1= CYAN,   // c1 = CYAN = 0;

   c2= BROWN,   // c2 = BROWN = 2;

   c3= DARKGRAY;  // c3 = DARKGRAY = 12;

 

ВПК c1: 00 00 00 0016

ВПК c2: 02 00 00 0016

ВПК c3: 0C 00 00 0016

 

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

 

char array25[][4][3] = {{6,74,5,{}}}

 

Оскільки всередині головних фігурних дужок знаходиться 1 пара другорядних дужок, тому розмірність масиву array25[1][4][3]. І тому розмірність масиву 1*4*3=12.

 

6

74

5

0

0

0

0

0

0

0

0

0




 

 

 

 

 

 

 

 

 

Його ще можна записати у такому вигляді

{{{{6},{74},{5}},{{0},{0},{0}},{{0},{0},{0}},{{0},{0},{0}}}}

 

Виконуємо переприсвоєння:

1-ий елемент масиву  = 0*21 = 0;

2-ий елемент масиву  = 6*21 = 126;

3-ий елемент масиву  = 6*21 = 126;

4-ий елемент масиву  = 6*21 = 126;

5-ий елемент масиву  = 0*21 = 0;

6-ий елемент масиву  = 5*21 = 105;

7-ий елемент масиву  = 3*21 = 61 ;

8-ий елемент масиву  = 2*21 = 42;

9-ий елемент масиву  = 5*21 = 105;

10-й елемент масиву  = 9*21 = 189;

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

 

0

126

126

126

0

105

61

42

105

189

0

0




 

 

 

 

 

 

 

 

 

У 16 системі числення:

00

7E

7E

7E

00

69

3D

2A

69

BD

00

00




 

 

 

 

 

 

 

 

 

Оскільки тип масиву char, то і тип усіх елементів масиву також char, розмір якого 1 байт.

 

Отже, ВПК16 = 00 7E 7E 7E 00 69 3D 2A 69 BD 00 00

 

2.2.4. Представлення структур в пам’яті комп’ютера.

 

struct str25 {

             int b :4;               // Займає ВПК 4 біт

               // Оскільки далі нема бітового поля, то незаповнені байти

                                        // заповняться з 4 біт до 4 байт оскільки тип int у ВПК займає 4 байти.

long d;                 // Займає ВПК 4 байт 

             char c[9];  // Займає ВПК 1*9= 9 байт 

                  // через те що сума байт попередніх  змінних  

                // дорівнює 17, а це число не ділиться націло на кількість байт типу unsigned, що йде   

                //далі, який у ВПК займає 4 байти тому відбувається вирівнювання до 20 байт

             unsigned :0; // Займає ВПК 0 біт

unsigned long e:13;             // Займає ВПК 13 біт

                          // Оскільки далі нема бітового поля, то незаповнені байти

                        // заповняться з 13 біт до 4 байт оскільки тип unsigned long у ВПК займає 4 байти.

             long double a;  // Займає ВПК 8 байт 

char f ;  // Займає ВПК 1 байт

                                      //через те що сума байт попередніх  змінних  

                        // дорівнює 33 а це число не ділиться націло на кількість байт типу long double,  

                        // який у ВПК займає 8 байт, тому відбувається вирівнювання до 40 байт.

 

}str;

 

 

Загальний розмір структури  дорівнює 4+4+9+3+4+8+1+7= 40 байт.

 

Номер байту

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Значення

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

Число

int b :4

long d

c[0]

c[1]

c[2]

c[3]

c[4]

c[5]

c[6]

c[7]

c[8]

Вирівнювння


 

Номер байту

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

Значення

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

Число

unsigned long e:13

long double a

char f

Вирівнювання


 

На даному етапі ВПК  структури заповнене 40-ма однаковими байтами СС, оскільки вона ще порожня. Виконую надання значень елементам структури.

 

  1. long double a = 21,105;

str.a = 21,105;

 

Переведем число у 16 та 2 СЧ:

2110 = 1516 = 0001 01012

0,10510=0,1(AE147)16= 0, 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 01112

21,10510 = 15,1(AE147)16= 1 0101, 0001 1010 1110 0001 0100 0111 1010 1110 0001 01002

 

Тип long double займає ВПК 8 байт (64 біт).

З них 11 біт виділяється під експоненту, 1 біт під знак числа і решта 52 під мантису.

 

Необхідно визначити значення m (мантиса), s(знак) та e(експонента).

s = 0, бо число додатне.

 

1 0101, 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10102

 

Нормалізуємо число:

1, 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10102* 100100

             Заокруглення:

           1, 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1010│1110

            +                                                 ________________________________          1


         1, 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1011

Знайдемо експоненту е = 102310 + 410 = 102710 = 40316 = 0100 0000 00112

 

Знайдемо мантису m:

m = 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10112

          

Зборка за схемою:

 

1біт

11 біт

52 біта                         

s

e

m

0

100 0000 0011

0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1011


 

0100 0000 0011 0101 0001 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 10102 = =40 35 1A E1 47 AE 14 7B16

 

Тепер для отримання значення числа ВПК, необхідно обернути його побайтно, бо ВПК числа типу float зберігаються у зворотньому порядку розміщення байт числа.

 

Отже, ВПК -  7B 14 AE 47 E1 1A 35 4016

 

  1. int b:4;

str.b = 3224;

 

322410 = C9816=1100 1001 10002

Під тип int зарезервовано 4 байти структури, але з цих 4-х байт заповнюються тільки 4 молодших біта змінної b.

str.b =  1100 1001 10002

4 молодших біти str.b: 10002

Змінна b до присвоєння: 1100 1100 1100 1100 1100 1100 1100 11002  (СС СС CC CC16)

Змінна b після присвоєння: 1100 1100 1100 1100 1100 1100 1100 1000 2

ВПК b: 1100 1000 1100 1100 1100 1100 1100 11002

 

ВПК b:   C8 СС CC CC16

 

  1. char c[9];

str.c[0]  =  ‘G’ = 4716;

str.c[1]  =  ‘a’ = 6116;

str.c[2]  =  ‘z’ = 7A16;

str.c[3]  =  ‘d’ = 6416;

str.c[4]  =  ‘a’ = 6116;

Решта вільних елементів масиву будуть заповнені числом СС16

 

ВПК масиву: 47 61 7A 64 61 CC CC CC CC16

 

4) long d;

str.d = 0;

010=016

Під тип unsigned long зарезервовано 4 байти структури.

 

ВПК (str.d): 00 00 00 0016

 

5)   unsigned long e:13;

str.e = 3780;

378010 = EC416 = 1110 1100 01002 

13 молодших біти str.e:  1110 1100 01002

Змінна e до присвоєння: 1100 1100 1100 1100 1100 1100 1100 11002  (СС СС СС СС16)

Змінна e після присвоєння: 1100 1100 1100 1100 1100 1110 1100 01002

 

ВПК (str.e): C4 CE CC CС16

 

 

 

 

 

6)  char f;

str.f = ‘9’;

ASCII код цифри 9 - це 3916 .Оскільки тип char, як правило, займає 1 байт пам'яті, це означає що змінна f буде мати значення 3916.

 

ВПК (str.f):  3916

 

 

Тепер ми маємо остаточне  представлення структури в пам’яті  комп’ютера:

Номер байту

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Значення

C8

CC

CC

CC

00

00

00

00

47

61

7A

64

61

CC

CC

CC

CC

CC

CC

CC

Число

int b :4

long d

c[0]

c[1]

c[2]

c[3]

c[4]

c[5]

c[6]

c[7]

c[8]

Вирівнювння


 

Номер байту

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

Значення

C4

CC

CC

CC

7B

14

AE

47

E1

1A

35

40

39

CC

CC

CC

CC

CC

CC

CC

Число

unsigned long e:13

long double a

char f

Вирівнювання


 

 

 

Отже у ВПК ця структура представлена: C8 СС CC CC 00 00 00 00 47 61 7A 64 61 CC CC CC CC CC CC CC C4 CE CC CС 7B 14 AE 47 E1 1A 35 40 39 CC CC CC CC CC CC CC 16

 

 

2.2.5. Представлення об'єднань в пам’яті комп’ютера.

 

union un7 {

 

int b;                                         // Займає ВПК 4 байти

  struct {


   float f[2];                      // Займає ВПК 2*4=8 байти         


wchar_t a[6];              // Займає ВПК 6*2=12 байт

};

  struct {


   char d[5];                   // Займає ВПК 5*1=5 байт                            


float e;                        // Займає ВПК 4 байти                   

};

int c;                                          // Займає ВПК 4 байти

} un; 

//Максимальний елемент  об’єднання - 20 байт //(кратне 4, тому вирівнювання не відбувається)

 

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’;

Обє’днання складається  з 4-х елементів, максимальний з яких займає 20 байт

 

Байти

0

1

2

3

4

5

6

7

8

9

Заповнення

CC

CC

CC

CC

CC

CC

CC

CC

CC

CC

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