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)
| 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.
| 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 |