Tizenhatos számrendszer

A Wikipédiából, a szabad enciklopédiából

A tizenhatos (hexadecimális) számrendszer a 16-os számon alapuló számrendszer, az informatika kulcsfontosságú számrendszere (zsargonban: hexa). A tizenhatos számrendszer a 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 számjegyeken kívül az A, B, C, D, E, F betűket (vagy ezeknek kisbetűs megfelelőjét; mindkettő használat megengedett) használja.

A 0–9 számjegyek használata értelemszerű (azaz: a tízes számrendszernek megfelelő), az A számjegy 10-et, a B számjegy 11-et, a C számjegy 12-t, a D számjegy 13-at, az E számjegy 14-et és az F számjegy 15–öt jelöl (ez összesen 16 számjegy, hiszen a nulla az első).

Az eltérő számrendszer használatára általában a szám után írt alsó indexes H betű utal, például: C9H. A tizenhatos számrendszerben leírt szám számjegyei tulajdonképpen a tizenhatos szám 0-val kezdődő és számjegyenként eggyel növekvő exponensei a szám legkisebb helyiértékű számjegyeitől haladva a legnagyobb helyiértékűekig (azaz jobbról balra). Például 3F8H a tízes számrendszerben 1016 (= 3×162 + 15×161 + 8×160).

A hexadecimális kifejezés a görög nyelv έξι (hexi) szavából (jelentése: „hat“) és latin nyelv decem (jelentése: tíz) szavaiból származik.

0hex = 0dec = 0oct 0 0 0 0
1hex = 1dec = 1oct 0 0 0 1
2hex = 2dec = 2oct 0 0 1 0
3hex = 3dec = 3oct 0 0 1 1
4hex = 4dec = 4oct 0 1 0 0
5hex = 5dec = 5oct 0 1 0 1
6hex = 6dec = 6oct 0 1 1 0
7hex = 7dec = 7oct 0 1 1 1
8hex = 8dec = 10oct 1 0 0 0
9hex = 9dec = 11oct 1 0 0 1
Ahex = 10dec = 12oct 1 0 1 0
Bhex = 11dec = 13oct 1 0 1 1
Chex = 12dec = 14oct 1 1 0 0
Dhex = 13dec = 15oct 1 1 0 1
Ehex = 14dec = 16oct 1 1 1 0
Fhex = 15dec = 17oct 1 1 1 1

A hexadecimális szám felírási módjai[szerkesztés | forrásszöveg szerkesztése]

Mivel az egyes programozási nyelvekben gyakran fordulnak elő hexadecimális számok és mivel a programozási nyelvek sokrétűek és fejlődésük hektikus, ezért a hexadecimális számok felírása is különböző:

  • az Ada és VHDL programozási nyelvek a számot egy "numerikus idézőjelbe" ("#" karakter) teszik "#" (például "20#5A3#"),
  • a C programozási nyelv és a rajta alapuló nyelvek (például a Java programozási nyelv) a „0x” prefixet használja (például „0x5A3”). A „0” azt jelenti a fordítóprogram számára, hogy számról van szó, az „x” pedig azt, hogy hexadecimális számról,
  • a HTML nyelvben szintén az „x” karakter használatos, például a decimális „֣” hexadecimális megfelelője az „֣”,
  • Pascal-ban és néhány Assembly-ben a szám mögé egy „h” betűt írunk; ha a szám betűkarakterrel kezdődne, akkor elé még egy nullát is, példák: „0A3Ch”, „5A3h”,
  • a többi Assembly-ben (AT&T, Motorola) és néhány Basic nyelvjárásban, a Turbo Pascal-ban, és a Delphiben a „$” prefix használatos (például „$5A3”),
  • a többi Basic-ben a „&h” karakterek használatosak („&h5A3”),

Megjegyzés: a fenti példákban az idézőjel csak a jobb érthetőség miatt szerepel, valójában nem szabad kiírni.

Alkalmazásai[szerkesztés | forrásszöveg szerkesztése]

A tizenhatos számrendszer gyakran használatos a számítógépek körüli tudományágakban, mivel e számrendszer alapja, a 16-os szám, egyenlő 24-el, ami azt jelenti, hogy egy hexadacimális szám éppen négy bitet (1 nibble-t) képvisel. Így tehát egy bájt értéke kifejezhető éppen egy kétjegyű hexadecimális számmal (a 00H – FFH intervallumban). Ezzel az ábrázolással egyszerűbb a bitsorozatokat leírni, könnyebb olvasni, és nehezebb eltéveszteni:

                                  Bináris       Hexadecimális           Decimális
                                   1111  =              F  =             15
                                 1.1111  =             1F  =             31
                      11.0111.1100.0101  =           37C5  =          14277
                    1010.1100.1010.1011  =           ACAB  =          44203
                  1.0000.0000.0000.0000  =         1.0000  =          65536
1010.1111.1111.1110.0000.1000.0001.0101  =      AFFE.0815  =     2952661013

A Bailey-Borwein-Plouffe-összegképlettel a π szám tetszőleges tizenhatodos jegye meghatározható az előző jegyek ismerete nélkül.

Átváltása[szerkesztés | forrásszöveg szerkesztése]

Átváltás 10 alapú számrendszerből tizenhatos számrendszerbe[szerkesztés | forrásszöveg szerkesztése]

A legkönnyebben megérthető módszer az, hogy megnézzük, hányszor van meg benne a lehető legnagyobb 16-hatvány, és ezt ismételjük, amíg nullát nem kapunk.

A sorozatos osztás módszere[szerkesztés | forrásszöveg szerkesztése]

Az előző módszer finomítása a sorozatos osztás módszere. Ahelyett, hogy egyből a lehető legnagyobb hatvánnyal osztanánk, az új alappal osztunk sorozatosan, így a kisebb egységektől haladunk a nagyobbak felé. A maradékok az egyre nagyobb egységek számát jelzik. Előnye, hogy nem kell előre megbecsülni, hogy mekkora a lehető legnagyobb hatvány, ami még nem kisebb az adott számnál.

Az eredeti számot maradékosan osztjuk tizenhattal, így megkapjuk, hány tizenhatos lenne benne. A maradék az egyesek számát adja. Megnézzük, hogy van-e elég tizenhatos ahhoz, hogy egy nagyobb egységet képezzen. Ha van, akkor egy maradékos osztással megkapjuk, hány tizenhatost nem lehet egy nagyobb egységre beváltani. Ismételjük az osztásokat, amíg nem kapunk egy tizenhatnál kisebb számot. Ez lesz a tizenhatos számrendszerbe átírt szám első jegye. A többi jegyét fordított sorrendben adják a maradékok.

A sorozatos szorzás módszere[szerkesztés | forrásszöveg szerkesztése]

Az előbbi módszerekkel csak egész számokat tudunk átváltani. A sorozatos szorzás módszerével azonban a tizedestörtek is átválthatók.

Feltehetjük, hogy a tizedestört nulla és egy közé esik. Szorozzuk meg a tizedestörtet tizenhattal, és vegyük az egészrészét. Ez megadja a tizenhatodostört első jegyét. A másodszori szorzás eredményének egészrészeként a tizenhatodostört második jegyét kapjuk, és így tovább.

Véges tizenhatodostört esetén az eljárás véget ér. Más racionális számok esetén elég addig alkalmazni a módszert, amíg egy teljes szakaszt nem kapunk. Irracionális számokra az eljárás nem ér véget. Így csak az első n jegyet kaphatjuk meg.

Ha egy valós számnak van egészrésze és törtrésze is, akkor ezt a módszert az előző kettő valamelyikével kell kombinálni.

Átváltás tizenhatos számrendszerből 10 alapú számrendszerbe[szerkesztés | forrásszöveg szerkesztése]

Alkalmazhatók a fordított irány esetén használt módszerek. Mivel csak a decimális számrendszerben szoktunk számolni, ezért egyszerűbb lehet, ha használjuk a következő képletet:

\sum_{i=0}^n \left( a_i\times B^i \right).

Kétjegyű számokra különösen egyszerű. Szorozzuk az első jegyet tizenhattal, és adjuk hozzá a második jegyet.

A 0 és a 255 közötti számok átszámításának megkönnyítésére szolgál az átszámolási táblázat.

Átszámolási táblázat[szerkesztés | forrásszöveg szerkesztése]

A programozói gyakorlatban gyakran van szükség a 0–255 tartományban lévő számok átszámolására a tízes és a tizenhatos számrendszerek között. A következő táblázat segítségével gyorsan elvégezhető az átváltás oda-vissza. A táblázat lényege, hogy a táblázat cellái tartalmazzák a decimális értékeket, míg a táblázat első sora és első oszlopa a tizenhatos számrendszerbeli értékeket.

például 179(10) sor első oszlopában B0 van, az oszlop első sorában pedig 03. Ha összeadjuk a B0+03, akkor B3 kapunk, amely a 179 tizenhatos számrendszerben felírt formája. A visszafele váltás ennek pontosan a fordítottja.
HEX 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
20 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
30 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
40 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
50 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
60 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
70 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
80 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
90 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
A0 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
B0 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
C0 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
D0 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
E0 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
F0 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Átváltás más 2-hatvány alapú számrendszerekbe és vissza[szerkesztés | forrásszöveg szerkesztése]

Tizenhatos számrendszerbeli számot különösen egyszerű egy másik 2-hatvány alakú számrendszerbe átírni. Ezt azért lehetséges, mert 16 is 2 hatványa.

Kettes számrendszerbe[szerkesztés | forrásszöveg szerkesztése]

Helyettesítsünk minden jegyet azok kettes számrendszerbeli alakjával.

Kettes számrendszerből[szerkesztés | forrásszöveg szerkesztése]

Az eljárás az előbbi fordítottja. Osszuk a biteket hátulról kezdve négyes csoportokra, és helyettesítsünk minden négyest tizenhatos számrendszerbeli alakjával.

Nyolcas számrendszerbe[szerkesztés | forrásszöveg szerkesztése]

Ez az átváltás az előzőekhez hasonlóan végezhető el. Ehhez segítségül hívjuk a kettes számrendszert. Először a tizenhatos számrendszerben megadott számot átírjuk kettes számrendszerbe, majd onnan tovább nyolcas számrendszerbe: a biteket hátulról kezdve hármas csoportokba osztjuk, és minden hármas helyett azok nyolcas számrendszerbeli alakját írjuk.

Négyes számrendszerbe és onnan[szerkesztés | forrásszöveg szerkesztése]

Lásd: négyes számrendszer

Nyolcas számrendszerből[szerkesztés | forrásszöveg szerkesztése]

Az előző algoritmus fordítottjával az átváltás ebben az irányban is egyszerű.

Hexadecimális törtek[szerkesztés | forrásszöveg szerkesztése]

Helyi értékes rendszerekben a vessző után álló n-edik jegy helyi értéke 1 \over B^n, ahol B a számrendszer alapját jelöli. Így a tizenhatodosvessző utáni első jegy helyi értéke {1 \over 16^1} = {1 \over 16}, a másodiké {1 \over 16^2} = {1 \over 256}, a harmadiké {1 \over 16^3} = {1 \over 4096}, és így tovább.

A 16 kettőhatvány, és mivel a kettes prímszám, ezért 16-nak csak egy prímosztója van. Így a törtek csak akkor írhatók fel véges tizenhatodostörtként, ha nevezőjük kettő hatványa:

1 \over 1
=
1 1 \over 5
=
0,316 1 \over 9
=
0,1C716 1 \over \mathrm D_{16}
=
0,13B16
1 \over 2
=
0,816 1 \over 6
=
0,2A16 1 \over \mathrm A_{16}
=
0,1916 1 \over \mathrm E_{16}
=
0,124916
1 \over 3
=
0,516 1 \over 7
=
0,24916 1 \over \mathrm B_{16}
=
0,1745D16 1 \over \mathrm F_{16}
=
0,116
1 \over 4
=
0,416 1 \over 8
=
0,216 1 \over \mathrm C_{16}
=
0,1516 1 \over 10_{16}
=
0,116

A tizenhatos számrendszer matematikai ábrázolása[szerkesztés | forrásszöveg szerkesztése]

Decimális számrendszerben:

h_m h_{m-1} \cdots h_0, h_{-1} h_{-2} \cdots h_{-n} = \sum_{i=-n}^m h_i \cdot {(16_{10})}^i \qquad m,n\in\mathbb{N}\quad h_i\in\{0;1;\cdots ;15\}

Hexadecimális számrendszerben:

h_m h_{m-1} \cdots h_0, h_{-1} h_{-2} \cdots h_{-n} = \sum_{i=-n}^m h_i \cdot {(10_{16})}^i \qquad m,n\in\mathbb{N}\quad h_i\in\{0;1;\cdots ;9;A;\cdots;F\}

Források[szerkesztés | forrásszöveg szerkesztése]

Wiktionary-logo-hu.png
Keress rá Tizenhatos számrendszer tizenhatos számrendszer címszóra a Wikiszótárban!

Lásd még[szerkesztés | forrásszöveg szerkesztése]