Hexadecimális

A Programozás Wiki wikiből

A hexadecimális jelentése: 16-os számrendszerben ábrázolt. A modern számítógépek (Neumann óta) a kettes számrendszerre épülnek. Az idők folyamán a számítógépeken a 8 bites (byte) memória szervezés szinte kizárólagossá vált.


A programozási nyelvekben gyakori feladat a memória tartalom megadása. Az ember számára természetes 10-es számrendszer szervezése eltér a byte szervezéstől, így számos nehézséget okoz a byte-k ill. 16,32,64 bites értékek megadása, így sok esetben nem célszerű a használata. A gép felépítéséből adódóan erre logikus lenne a 2-es számrendszerbeli értékek megadása, de mivel ekkor csak a 0 és 1 jegyeket használhatnánk, a számkonstansok igen hosszúak lennének. Egy byte tartalmának megadásához 8 jegyű 2-es számrendszerbeli számokat kellene használni, ami nehézkes (a 32 bites vagy 64 bites konstansok megadása pedig már használhatatlanná válik). Ennek a problémának a feloldására vezették be az oktális és hexadecimális számábrázolást.

Az oktális (8-as számrendszerbeli) ábrázolás régebben nagyon elterjedt volt, mivel a 0-7 karakterekkel ábrázolható oktális számjegyek a csak numerikus klaviatúrákon is könnyen bevihető volt. Az átváltás kettes számrendszerből is nagyon egyszerű, hiszen 8 = 23. Az átváltás simán fejben is el lehet végezni, úgy, hogy a kettes számrendszerbeli szám bitjeit jobbról balra haladva 3-assával részekre bontjuk, s ezeket a kis részeket behelyesítjük a 8-as számrendszerbeli alakkal. Példa:

 1101 0101(2)  át akarjuk váltani 8-as számrendszerbe akkor 011 010 101 = 325(8) lesz az eredmény.


Jelenleg főként a hexadecimális ábrázolást használjuk amelyben a 'számjegyek' 0-15 értéket vehetnek fel. Ekkor egy-egy 'számjegy' 4 bitnyi információt tárol, vagyis a 8 bites byte szervezéshez ideális, mivel egy byte tartalmát 2 hexadecimális jegy határozza meg. (a 16 bites értéket 4 hexadecimális jegy stb.)


Mivel a 10-es számrendszerben az egyedi számjegyek száma csak 10 ('0'-'9'), így ezek használata kevés a hexadecimális 'számjegyek' megjelenítésére, így az ABC első 5 betűjét használjuk a 9-et meghaladó jegyek jelölésére. A 10 értékű hexadecimális jegy céljára az 'A' karaktert, a 11 értékű hexadecimális jegy céljára az 'B' karaktert, a 12 értékű hexadecimális jegy céljára az 'C' karaktert, a 13 értékű hexadecimális jegy céljára az 'D' karaktert, a 14 értékű hexadecimális jegy céljára az 'E' karaktert, a 15 értékű hexadecimális jegy céljára az 'F' karaktert használjuk. (a gyakorlatban mind a nagy 'A'-'F', mind a kis 'a'-'f' karakterek használhatóak)


Példák:
10-es számrendszerben 2-es számrendszerben 16-os számrendszerben 8-as számrendszerben
0 00000000 00 0
4 100 4 4
7 111 7 7
9 1001 9 11
10 1010 A 12
15 1111 F 17
16 1 0000 10 20
127 111 1111 7F 177
255 1111 1111 FF 377
256 1 0000 0000 100 400


A hexadecimális szám megadás előnye kettős. - A számok tömörek, kevés karakterrel meghatározhatóak. - A hexa értékek "fejben" könnyedén 4 bites formára hozhatóak, így a byte szervezéshez jobban illeszkednek.

A hexadecimális számok megadásakor (szám literálok) fontos, hogy a a fordító program képes legyen megkülönböztetni (kitalálni) a használt számrendszereket.

A 100 karakterek megadása értelem szerűen 10-es számrendszerbeli, de ha ezt más számrendszerben értelmezzük teljesen más értéket jelent (2-es számrendszerben 4-et, 16-os számrendszerben 256-ot ábrázol). A C programozási nyelvben ezért a hexadecimális számok ábrázolásakor a 0x előtagot kell alkalmazni.

Példák C nyelvű számábrázolásra:
10-es számrendszerben 16-os számrendszerben C nyelvi literál alak
0 0 0x0 vagy 0x00 vagy 0x0000 stb.
4 4 0x4 vagy 0x04 vagy 0x0004 stb.
7 7 0x7 ...
9 9 0x9 ...
10 A 0xA
15 F 0xF
16 10 0x10
127 7F 0x7F
255 FF 0xFF
256 100 0x100