Иди на текст

Представљање података у меморији

Рачунарска меморија служи за чување података који се тренутно користе и програма који се тренутно извршавају. Да би се подаци ефикасно обрађивали, морају бити представљени у облику који рачунар разуме – у машинском коду, односно у бинарном бројевном систему. Сваки податак, без обзира да ли је у питању карактер, број или текст, у меморији се налази у виду низа битова.

Бит је најмања јединица податка у рачунару и може имати вредност 0 или 1.

Бајт представља низ од 8 узастопних битова (нпр. 10101100). Сваки бајт сачуван у меморији има своју јединствену адресу која омогућава процесору да му приступи. Адресе се приказују у хексадекадном облику (нпр. 0x6DFED4).

Капацитет меморије

Капацитет меморије представља количину података коју меморија може да сачува и изражава се у бајтовима, односно вишеструким јединицама бајта као што су килобајт (KB), мегабајт (MB), гигабајт (GB), терабајт (TB) итд.

У рачунарима се подаци представљају бинарно, па су јединице капацитета традиционално дефинисане као степен броја два:

  • 1 KB = 2¹⁰ B = 1024 B,
  • 1 MB = 2¹⁰ KB = 1024 KB,
  • 1 GB = 2¹⁰ MB = 1024 MB,
  • 1 TB = 2¹⁰ GB = 1024 GB итд.

Овакав и само овакав начин користићеш и ти.

Ако је све тако јасно и прецизно, зашто твој хард диск, на пример, капацитета 2 TB, нема 2 TB него мање??? Неки произвођачи меморијских уређаја непоштено користе декадни систем, где су јединице засноване на степенима броја десет (1 KB = 1000 B, 1 MB = 1000 KB итд.) што доводи до конфузије, јер оперативни системи користе бинарни систем и приказују мању вредност од оне наведене на паковању.

Да би се избегла забуна, уведене су IEC јединице...

  • 1 KiB = 1024 B
  • 1 MiB = 1024 KiB,
  • 1 GiB = 1024 MiB,
  • 1 TiB = 1024 GiB итд.

...које јасно означавају да је у питању бинарни систем.

Типови података

У уводној лекцији овог поглавља научио си да постоје различити типови података, нпр. знаковни, нумерички целобројни, нумерички реални итд. Сваки од ових типова различито се представља у меморији рачунара у бинарном облику.

Претварање декадних у бинарне бројеве

Да би претворио број из декадног у бинарни бројевни систем потребно је да вршиш целобројно дељење датог броја са два и записујеш остатке све док количник не буде једнак нули. Остаци записани у супротном редоследу од оног којим су добијени представљају број у бинарном бројевном систему. На пример, претвори број 123 из декадног у бинарни бројевни систем.

\[\frac{123}{2}=61,остатак=1$$ $$\frac{61}{2}=30,остатак=1$$ $$\frac{30}{2}=15,остатак=0$$ $$\frac{15}{2}=7,остатак=1$$ $$\frac{7}{2}=3,остатак=1$$ $$\frac{3}{2}=1,остатак=1$$ $$\frac{1}{2}=0,остатак=1$$ $$123_{(10)}=1111011_{(2)}\]

Претварање бинарних у декадне бројеве

Да би број преворио из бинарног у декадни бројевни систем, последњу цифру бинарног броја множи са \(2^0\), претпоследњу са \(2^1\), следећу са \(2^2\) и тако редом. Збир добијених производа представља број у декадном бројевном систему.

На пример, претвори број \(1111011\) из бинарног у декадни бројевни систем.

\[1111011_{(2)}=$$ $$=1\cdot2^{0}+1\cdot2^{1}+0\cdot2^{2}+1\cdot2^{2}+1\cdot2^{4}+1\cdot2^{5}+1\cdot2^{6}=$$ $$=1+2+0+8+16+32+64=$$ $$=123_{(10)}\]

Знаковни тип

Знаковни тип података служи за представљање појединачних карактера. Карактер се у меморији памти као цео број и назива се малим целобројним податком. Због тога се може рећи да знаковни тип представља подскуп целобројног типа.

У савремени рачунарима, за памћење карактера користе се ASCII или UNICODE кодни распореди. ASCII (енгл. American Standard Code for Information Interchange) кôд је 7-битни бинарни кôд, који се у меморији представља са 8 бита (једним бајтом), дат у следећој табели:

DEC OCT HEX CH    DEC OCT HEX CH    DEC OCT HEX CH    DEC OCT HEX CH
---------------   ---------------   ---------------   ---------------
0   0   00  NUL   32  40  20  SPACE 64  100 40  @     96  140 60  `
1   1   01  SOH   33  41  21  !     65  101 41  A     97  141 61  a
2   2   02  STX   34  42  22  "     66  102 42  B     98  142 62  b
3   3   03  ETX   35  43  23  #     67  103 43  C     99  143 63  c
4   4   04  EOT   36  44  24  $     68  104 44  D     100 144 64  d
5   5   05  ENQ   37  45  25  %     69  105 45  E     101 145 65  e
6   6   06  ACK   38  46  26  &     70  106 46  F     102 146 66  f
7   7   07  BEL   39  47  27  '     71  107 47  G     103 147 67  g
8   10  08  BS    40  50  28  (     72  110 48  H     104 150 68  h
9   11  09  HT    41  51  29  )     73  111 49  I     105 151 69  i
10  12  0A  LF    42  52  2A  *     74  112 4A  J     106 152 6A  j
11  13  0B  VT    43  53  2B  +     75  113 4B  K     107 153 6B  k
12  14  0C  FF    44  54  2C  ,     76  114 4C  L     108 154 6C  l
13  15  0D  CR    45  55  2D  -     77  115 4D  M     109 155 6D  m
14  16  0E  SO    46  56  2E  .     78  116 4E  N     110 156 6E  n
15  17  0F  SI    47  57  2F  /     79  117 4F  O     111 157 6F  o
16  20  10  DLE   48  60  30  0     80  120 50  P     112 160 70  p
17  21  11  DC1   49  61  31  1     81  121 51  Q     113 161 71  q
18  22  12  DC2   50  62  32  2     82  122 52  R     114 162 72  r
19  23  13  DC3   51  63  33  3     83  123 53  S     115 163 73  s
20  24  14  DC4   52  64  34  4     84  124 54  T     116 164 74  t
21  25  15  NAK   53  65  35  5     85  125 55  U     117 165 75  u
22  26  16  SYN   54  66  36  6     86  126 56  V     118 166 76  v
23  27  17  ETB   55  67  37  7     87  127 57  W     119 167 77  w
24  30  18  CAN   56  70  38  8     88  130 58  X     120 170 78  x
25  31  19  EM    57  71  39  9     89  131 59  Y     121 171 79  y
26  32  1A  SUB   58  72  3A  :     90  132 5A  Z     122 172 7A  z
27  33  1B  ESC   59  73  3B  ;     91  133 5B  [     123 173 7B  {
28  34  1C  FS    60  74  3C  <     92  134 5C  \     124 174 7C  |
29  35  1D  GS    61  75  3D  =     93  135 5D  ]     125 175 7D  }
30  36  1E  RS    62  76  3E  >     94  136 5E  ^     126 176 7E  ~
31  37  1F  US    63  77  3F  ?     95  137 5F  _     127 177 7F  DEL

На основу ове табеле можеш да видиш како се било који од карактера представља у меморији. На пример, слово A је декадно 65, односно 01000001 бинарно.

Unicode је проширени кодни распоред који обухвата све ASCII кодове као свој први део. У Unicode-у, првих 128 кодних вредности (U+0000 до U+007F) потпуно су идентичне ASCII кодовима.

Специфични латинични карактери српске азбуке дефинисани су на следећи начин:

Кôд Симбол Декадно
U+0106 Ć 262
U+0107 ć 263
U+010C Č 268
U+010D č 269
U+0110 Đ 272
U+0111 đ 273
U+0160 Š 288
U+0161 š 289
U+017D Ž 381
U+017E ž 382

Дефинисана су и слова која се пишу са два карактера:

Кôд Симбол Декадно
U+01C4 DŽ 452
U+01C5 Dž 453
U+01C6 dž 454
U+01C7 LJ 455
U+01C8 Lj 456
U+01C9 lj 457
U+01CA NJ 458
U+01CB Nj 459
U+01CC nj 460

Ћирилични карактери српске азбуке дефинисани су на следећи начин:

Кôд Симбол Декадно
U+0410 А 1040
U+0411 Б 1041
U+0412 В 1042
U+0413 Г 1043
U+0414 Д 1044
U+0402 Ђ 1026
U+0415 Е 1045
U+0416 Ж 1046
U+0417 З 1047
U+0418 И 1048
U+0408 Ј 1032
U+041A К 1050
U+041B Л 1051
U+0409 Љ 1033
U+041C М 1052
U+041D Н 1053
U+040A Њ 1034
U+041E О 1054
U+041F П 1055
U+0420 Р 1056
U+0421 С 1057
U+0422 Т 1058
U+040B Ћ 1035
U+0423 У 1059
U+0424 Ф 1060
U+0425 Х 1061
U+0426 Ц 1062
U+0427 Ч 1063
U+040F Џ 1039
U+0428 Ш 1064
U+0430 а 1072
U+0431 б 1073
U+0432 в 1074
U+0433 г 1075
U+0434 д 1076
U+0452 ђ 1106
U+0435 е 1077
U+0436 ж 1078
U+0437 з 1079
U+0438 и 1080
U+0458 ј 1112
U+043A к 1082
U+043B л 1083
U+0459 љ 1113
U+043C м 1084
U+043D н 1085
U+045A њ 1114
U+043E о 1086
U+043F п 1087
U+0440 р 1088
U+0441 с 1089
U+0442 т 1090
U+045B ћ 1115
U+0443 у 1091
U+0444 ф 1092
U+0445 х 1093
U+0446 ц 1094
U+0447 ч 1095
U+045F џ 1119
U+0448 ш 1096

Иако изгледа да су нека латинична и ћирилична слова иста, њихове Unicode кодне вредности се разликују. На пример, латинично велико слово A кодирано је као U+0041, док је ћирилично велико слово А кодирано као U+0410.