Bináris számábrázolás
Tartalomjegyzék
A bináris jel
A bináris szám elemi értéke kétféle lehet: 0 vagy 1. Vezetéken nézve logikai jelszintről beszélünk, amelynek értéke L (low) vagy H (high) logikai érték.
A jelszintek feszültségtartománya attól függ, milyen logikáról beszélünk.
- TTL logika esetén 0,8 V alatt L szint, 2 V felett H szint. Közte határozatlan.
- CMOS esetén a tápfeszültség 1/3-a alatt L, a 2/3-a felett H szint. Közte határozatlan.
Több bináris jel és értelmezése
Ahogy a tízes számrendszerben megszokott, hogy több helyiértéket írunk egymás mögé, ugyanúgy vezethetünk többet is a fent ismertetett kétállapotú jelvezetékekből. Ekkor adatbuszról beszélünk. A leg alapvetőbb két feltétel akár tízes, akár kettes számrendszerről legyen is szó:
- ne keverjük össze a helyiértékeket, vezeték esetén a logikai jeleket szállító vezetékek sorrendjét
- nem mindegy, hogy jobbról balra, vagy balról jobbra olvassuk a számjegyeket, a többvezetékes buszon nevezzük a felső helyiértéket MSB-nek (most significant bit), a legalsó helyiértéket LSB-nek (least significant bit).
Az így kapott N bit széles buszon összesen 2N féle állapot, azaz ennyi érték ábrázolható. Például 8 bit esetén 28 = 256 (0..255 vagy kettes komplemens ábrázolásnál -128 .. +127), míg 12 bit esetén 212 = 4096 (0..4095 vagy kettes komolemens ábrázolásnál -2048..+2047) egész érték jeleníthető meg. És így tovább.
Konverzió más számrendszerre
Tizenhatos számrendszer
A sok-sok egymás után írt '110100100101' bináris értékek emberi szem számára nehezen olvashatók a túl sok jel miatt. Így helyette gondolatban 4 bitenként csoportosítjuk a biteket. Ezáltal az előző számsor '1101 0010 0101'-ként látható. Az elemi 4 bites csoportok pedig 0..15 közé eső értékkel írhatók le, amit a gyakorlatban a jól bevált 0..9 számjegyekkel, majd a..f betükkel írunk le. Ezáltal a példában ismertetett számsor értékei: 13, 2, 5, amit egyszerűen d25. Gyakran előfordul, hogy 0..9 közé esik minden számjegye, ami által önmagában nem látjuk belőle, hogy tizes vagy 16-os számrendszerként értelmezendő számmal van-e dolgunk. Ennek feloldása érdekében eléírunk egy számrendszert jelölő betűt vagy betűpárost.
- 2-es (= bináris, bin) számrendszer esetén a 0b előtag, például 0b110100100101 vagy 0b.1101.0010.0101 írásforma a szokásos
- tízenhatos (= hexadecimális, hex) számrendszer esetén a 0x előtag, például 0xd25 vagy 0x0d25 ill. 0x00000d25 utóbbiakkal jelezve hogy 16 ill. 32 bites busz fogja szállítani a számot.
- tízes (= decimális, dec) számrendszer esetén: semmi, ahogy a 'hétköznapi' életben megszoktuk.
Tízes számrendszer
Kettő lehetséges módszer terjedt el:
- BCD ábrázolás, ahol a 4 bitenként csoportosított bináris jel csak 0..9 (0b0000..0b1001) közötti értéket vehet fel, és például ha 7+5 összeadást végezzük el (0b0111 + 0b0101 = 0b1100), akkor rögvest kivonunk a kapott értékből 10-et (0b1100-0b1010) és a maradék lesz az utolsó helyiérték, a magasabb pedig 1-gyel növekszik. Azaz 0x12 értéket vesz fel. De kijelzőre íráskor egyszerűen '12'-t írunk, hiszen bináris jelként 4 bitenként csoportosítva a a tízes számrendszerbeli digiteket ábrázoltuk a számolások során 0..9 értékek között.
- binárissá alakítani (a 4 bitenként csoportosított bitek 0..9 és a..f értékkészletet egyaránt felvehetik), binárisan elvégezni a számítást, adat továbbítását, stb, a megjelenítéskor pedig visszaalakítani tízes számrendszerbe. Előnye: egyszerűbb a processzornak vele számolni, azonban tízes->bináris konverzió és a bináris->tízes konverzió nehézkes.
- Konverzió tízes - tizenhatos
Például konvertáljuk a 345 értéket 16-os számrendszerbe:
- érték = (('3' * 10 + '4') * 10) + '5'
- érték = ((0b0011 * 0b1010 + 0b0101) * 0b1010) + 0b0101 = 0b.0001.0101.1001 (= 0x159)
- Konverzió tizenhatos - tízes
- Kiindulás például a fenti, 0b.0001.0101.1001 = 0x159 érték átalakítása:
- Osszuk el 10-zel a 0x159-et: 0b.0001.0101.1001 / 0b1010 = 0b.0010.0010 (= 0x22)
- Szorozzuk vissza 10-zel (0b1010) és a kapott eredményt vonjuk ki a 0x159-ből. A maradék az utolsó számjegy.
- Osszuk el 10-zel a 0x22-őt: 0b.0010.0010 / 0b1010 = 0b.0011
- Szorozzuk vissza 10-zel (0b1010) és a kapott eredményt vonjuk ki a 0x22-ből. A maradék az utolsó előtti számjegy.
- Osztás itt már nem kell, mert az eredmény 10 alatti, azaz megvan a legfelsőbb számjegy, ami a 3.
Mint látszik, ez a konverzió nehézkes, ezért egyszerűbb számításoknál BCD aritmetikát használnak inkább a binárissá konvertálás - bináris aritmetika - decimálissá konvertálás helyett. Bonyolultabb számítások esetén azonban a konvertálás és a bináris számokkal való számolás a hatékonyabb.
Egyszerű műveletek bináris jelekkel
Jelenként végzett logikai alapműveletek
Lásd: Logikai alapműveletek
Kettes komplemens képzés
Összeadás
Kivonás
Szorzás
Osztás
Lebegőpontos számábrázolás
Magasabbrendű műveletek
Sok függvény vagy eljárás kiszámítását nem lehet egy-egy egzakt osztással meghatározni. Azonban ezeknek a függvényeknek a pontos értékei fokozatosan közelíthetők a Taylor-soraikkal. Mielőtt nagyon furcsa szemekkel néznénk erre a tudományra, a Taylor-sor napjainkban már középiskolai tananyag, azonban összetettsége túlmutat a rádióamatőr témákon. Akit bővebben érdekel, itt olvashat róla és néhány alapvető függvény kiszámításáról.
Ami a lényeges számunkra:
- sin(x)
- cos(x) ---> tan(x) = sin(x)/cos(x)
- arctg(x). Érdekessége az arkusztangensnek, hogy arctg(1) éppen a π/4. Ez az egyik módszer a π közelítő kiszámításának.
- ln(x) ---> természetes logaritmus. Ha log(), azaz tízes alapú logaritmus kell, akkor ez így számolható: log(x) = ln(x)/ln(10)
- ex --> ha ab érték kell, ebből kiszámítható: [math]a^b = e^{ln(a) \cdot b}[/math]
- N. gyökvonás és N. hatvány: Hatványról volt szó. Gyökvonás ugyanígy zajlik, azonban az alap logaritmusát nem szorozzuk a kitevővel, hanem osztjuk. Azaz [math]\sqrt[b]{a} = e^{\frac{ln(a)}{b}}[/math]