Bináris számábrázolás

Innen: HamWiki
A lap korábbi változatát látod, amilyen HG2ECZ (vitalap | közreműködések) 2010. július 28., 12:13-kor történt szerkesztése után volt. (→‎Konverzió más számrendszerre)
Ugrás a navigációhoz Ugrás a kereséshez

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]