Számrendszer átalakítások
Mikrovezérlőkhöz való programíráskor általában 3 különböző számrendszerrel kell foglalkoznunk: decimális, bináris és hexadecimális (vagy hex). Azért használjuk a decimális számrendszert, mert ez a természetes; mi így számolunk. Sajnos a számítógépek nem így számolnak. Mivel a számítógépek és a mikrokontrollerek csak 1-es és 0-s számokra korlátozódnak, ezért e számok sorozataival számolnak. Ez a bináris számrendszer. A bináris számok elé általában a ‘0b’ karaktereket illesztik, amelyek nem részei a számnak. Néha 4 számjegyből álló csoportokra is fel vannak osztva, hogy könnyebben olvashatók legyenek, és könnyebb legyen a hexadecimális számrendszerhez viszonyítani őket. Egy példa a bináris számra: 0b0100.1011. A számban lévő pontok nem jelentenek semmit, csak megkönnyítik a szám olvasását.
A bináris rendszer egyszerűen érthető, de sok számjegyre van szükség ahhoz, hogy a bináris rendszert nagy számok ábrázolására használjuk. A hexadecimális rendszer sokkal nagyobb számokat tud ábrázolni kevesebb karakterrel, és nagyon hasonlít a bináris számokhoz. A hexadecimális számok elé általában a “0x” karaktereket illesztik, amelyek nem részei a számnak. Egyetlen hexadecimális számjegy négy bináris számjegyet jelenthet!
A bináris számok csak 1-ekből és 0-kból állhatnak; jellemzően egy bináris szám 8 számjegyből (vagy a 8 többszöröséből) áll, ha valamilyen számítógépben (vagy mikrokontrollerben) használják. Hasznos tudni, hogyan lehet egy bináris számot decimális számmá alakítani, és fordítva. Hogyan konvertáljuk tehát a számrendszerek között? Először nézzük meg, hogyan határozzuk meg egy decimális szám értékét. A 268-as szám felbontható úgy, hogy 200 + 60 + 8, vagy 2 * (10^2) + 6 * (10^1) + 8 * (10^0). Két fontos számot kell ismernünk a szám “lebontásához” – a számrendszer bázisát és a számjegy helyét a számon belül. A tízes számrendszer bázisa a 10. Amikor a 268-as számot alakítjuk át, a 2 a második számjegy, a 6 az első számjegy, a 8 pedig a nulladik számjegy. Minden egyes számjegyet a számon belüli helyének megfelelően kell skálázni. A számjegy skálája a számrendszer bázisa a számjegy számban elfoglalt helyének hatványára emelve. Tehát minden egyes számot skálázunk, majd az összes skálázott számjegyet összeadjuk, hogy megtaláljuk a szám összértékét.
Ugyanez a módszer használható egy bináris szám értékének meghatározására is. Nézzük például a 0b1011.0101-es számot. A bináris rendszer bázisa 2 (a 0b előtagot gyakran használják a kódban annak jelzésére, hogy a szám bináris formátumú). Számunk értéke: 1*(2^7)+0*(2^6)+1*(2^5)+1*(2^4)+0*(2^3)+1*(2^2)+0*(2^1)+1*(2^0), ami egyenlő 181.
0b1011.0101. Micsoda teljesen hatástalan módja egy szám beírásának! De ugyanazt a bináris számot mindössze 2 hexadecimális számjeggyel is ábrázolhatjuk. Először azonban egy hexadecimális (hex) számot alakítunk át decimálisra, ahogyan azt a bináris számok esetében is tettük. Mit szólnál a 0xB5-höz? Várj, mi?! A 0x előtagot a kódban arra használjuk, hogy jelezzük, hogy a számot hexadextben írjuk. De mit keres ott a “B”? A hexadecimális formátum bázisa 16, ami azt jelenti, hogy minden egyes számjegy legfeljebb 16 különböző értéket képviselhet. Sajnos a ‘9’ után kifogyunk a számjegyekből, ezért betűket kezdünk használni. Az “A” betű a 10, a “B” a 11, a “C” a 12, a “D” a 13, az “E” a 14, az “F” pedig a 15 számjegyet jelenti. Az ‘F’ a legnagyobb számjegy a hexa számrendszerben. A számot ugyanúgy alakítjuk át, mint korábban. A 0xB5 értéke tehát a következő: B*(16^1)+5*(16^0) vagy 181.
A bináris és hexa decimálisra való átalakítása fontos, de a leghasznosabb számkonverzió valószínűleg a hexa és a bináris közötti átalakítás. Ez a két számrendszer valójában elég jól működik együtt. A számrendszerek történetesen úgy kapcsolódnak egymáshoz, hogy egyetlen hexa számjegy pontosan 4 bináris számjegyet jelent, és így 2 hexa számjegy 8 bitet (vagy bináris számjegyet) jelenthet. Itt egy táblázat, amely megmutatja, hogy az egyes hexa számjegyek hogyan kapcsolódnak a bináris rendszerhez:
Bináris érték | Hex érték |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
Például, a 0x1C hexa számot binárisra konvertáljuk, megkeressük az 1 és a C megfelelő bináris értékét, és kombináljuk őket. Tehát a 0x1C binárisan 0b0001.1100. Ha egy bináris szám hexaértékét szeretnénk kitalálni, akkor a másik irányba megyünk. A 0b0010.1011 bináris szám hexa alakú ábrázolásához először megkeressük a 0010, majd az 1011 hexa értékét, és kombináljuk őket; a hexa érték 0x2B.
Számos ingyenes eszköz áll rendelkezésre, amelyek segítenek a számrendszerek közötti átváltásban, csak keressük ki a “hex szám konverzió” szót. Ha Windows operációs rendszert használsz, akkor a számológépbe beépített nagyszerű eszközzel rendelkezel. Csak állítsd át a számológépet tudományos üzemmódba, és a számrendszerek közötti konverzióhoz be kell írnod egy számot, majd meg kell változtatnod a számológép formátumát!