Ebben a cikkben a Tizenhatos számrendszer témával foglalkozunk, amely nagy érdeklődést és vitát váltott ki különböző területeken. A Tizenhatos számrendszer olyan téma, amely felkeltette az akadémikusok, a szakemberek és a nagyközönség figyelmét a mai társadalomban betöltött relevanciája miatt. A Tizenhatos számrendszer eredetétől napjainkig tanulmányozás, elemzés és elmélkedés tárgya volt, ami különböző elméletek, megközelítések és vélemények kialakulásához vezetett a témában. Ebben a cikkben a Tizenhatos számrendszer legfontosabb aspektusait, valamint a mindennapi élet különböző területeire gyakorolt hatását vizsgáljuk meg. Hasonlóképpen, a Tizenhatos számrendszer körül létező különböző perspektívákat is megvizsgáljuk azzal a céllal, hogy széles és átfogó képet adjunk a témáról.
Számjelölő rendszerek |
---|
Arab · Babiloni · Csuvas · Egyiptomi · Görög · Inka · Maja · Római · |
Számábrázolási rendszerek |
1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · 12 · 14 · 16 · 20 · 60 |
Vegyes alapú számrendszer |
A tizenhatos (vagy hexadecimális) számrendszer a 16-os számon alapuló számrendszer, az informatika kulcsfontosságú számrendszere (programozói szaknyelvben 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 számábrázoláshoz.
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, míg az F számjegy 15–öt jelöl (ez összesen 16 számjegy, tekintettel arra, hogy a nulla az első).
Az eltérő számrendszer használatára általában a szám után írt alsó indexes H betű vagy 16 utal, például: C9H vagy C916, programozásban legtöbbször az elé írt 0x (a hexa rövidítése), pl. 0xC9.
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 = 3×256 + 15×16 + 8×1 = 768+ 240 + 8 = 1016).
A hexadecimális kifejezés a görög έξι (hexi, jelentése: hat) és a latin decem (jelentése: tíz) szavakbó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 | |||
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ő:
Megjegyzés: a fenti példákban az idézőjel csak a jobb érthetőség miatt szerepel, a programkódban nem kell kiírni.
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-nel, ami azt jelenti, hogy egy hexadecimá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.
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.
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.
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. A nem egész számok a számrendszerben „tizenhatodostörtekként” írhatók fel.
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ő 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.
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:
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.
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ázatban az első oszlop tartalmazza az első számjegyet, az első sor a másodikat (egyes helyi értéket). A metszéspontban a decimális érték látható.
Például 179(10) sor első oszlopában B_ (azaz B0H) van, az oszlop első sorában pedig _3 (azaz 03H). Ha összeadjuk, B0 + 03 = B3-at kapunk, amely a 179 tizenhatos számrendszerben felírt formája. A visszafele váltás ennek pontosan a fordítottja.
HEX | _0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1_ | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2_ | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
3_ | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
4_ | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
5_ | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
6_ | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 |
7_ | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |
8_ | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |
9_ | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 |
A_ | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 |
B_ | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 |
C_ | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 |
D_ | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 |
E_ | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 |
F_ | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 |
A hexadecimális-decimális átváltásra szolgáló algoritmus közül az egyik talán legegyszerűbb, a sorozatos szorzás módszere.[1][2] Ez egy egyszerűen alkalmazható algoritmus, aminek a segítségével egy hexadecimális szám decimális számmá alakítható szorzások és összeadások révén. A módszer lényege a következő:
Adott egy tizenhatos számrendszerben lévő szám, melynek számjegyei hihi−1…h2h1. Elsőként ezeket a számjegyeket átváltjuk tízes számrendszerbe. Ezt követően az egyes számjegyeket 16 hatványaival szorozzuk az alábbi képlet szerint. A hatványozás során a kitevő értékét úgy kapjuk meg, hogy a helyi értékből levonunk egyet.
Az algoritmus képlete így néz ki:
decimáis érték = hi · 16(i-1) + hi-1 · 16(i-2) + … + h2 · 16(1) + h1 · 16(0)
Tehát például adott a 3F hexadecimális szám, ezt decimálissá a következő módon lehet átalakítani:
3F = 3 · 161 + F · 160 = 3 · 16 + 15 · 1 = 63
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.
Helyettesítsünk minden jegyet azok kettes számrendszerbeli alakjával.
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 a tizenhatos számrendszerbeli alakjával.
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.
Az előző algoritmus fordítottjával az átváltás ebben az irányban is egyszerű.
Helyi értékes rendszerekben a vessző után álló n-edik jegy helyi értéke , ahol a számrendszer alapját jelöli. Így a tizenhatodosvessző utáni első jegy helyi értéke , a másodiké , a harmadiké , és így tovább.
A 16 kettőhatvány, és mivel a 2 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, más esetekben szakaszos végtelen tizenhatodostörtként írhatók fel:
A táblázatban a föléhúzás a végtelenségig ismétlődő számjegyeket jelöli.
1 | 0,316 | 0,1C716 | 0,13B16 | ||||||||
0,816 | 0,2A16 | 0,1916 | 0,124916 | ||||||||
0,516 | 0,24916 | 0,1745D16 | 0,116 | ||||||||
0,416 | 0,216 | 0,1516 | 0,116 |
Decimális számrendszerben:
Hexadecimális számrendszerben: