Binárisan kódolt decimális
A Wikipédiából, a szabad lexikonból.
A számítástechnikában és az elektronikus rendszerekben a binárisan kódolt decimális – Binary-Coded Decimal (BCD) a decimális számok egy kódolási formája, amelyben minden számjegyet egy-egy bitsorozat ábrázol. Ezzel a módszerrel a számok konverziója és megjelenítése lényegesen egyszerűbbé válik. Ugyanakkor valamivel több elektronikus áramkörre van szükség a aritmetikai számításokhoz, és tárolóterületet veszítünk. Ennek ellenére ez a kódolási eljárás fontos, és használatos még ma is.
A BCD-nél, egy számjegynek általában 4 bit felel meg, amelyek általában a 0–9 karaketereket is jelentik. Más kombinációkat is használnak az előjelek és egyebek jelzésére.
Tartalomjegyzék |
[szerkesztés] Alapok
Egy decimális szám BCD kódolása egy gyakran alkalmazott kódolási eljárás, ami minden számjegy kódolásához egy négy bites bináris formát használ. Például a 127 kódolva:
0001 0010 0111
Mivel a legtöbb számítógép az adatokat 8 bites byte-okban tárolja, két megoldás használatos arra, hogy a 4 bites BCD számjegyeket byte-okon tárolják:
- minden számjegyet egy byte-on tárolnak, a második négy bit ekkor minden esetben 0000 (az EBCDIC kódnál), vagy 0011 ( ASCII kódnál)
- két számjegyet tárolnak minden byte-on.
A tiszta bináris ábrázolással szemben, nagy számok esetében a megjelenítés egyszerűen csak nibble-nként történhet, azonos logika felhasználásával. A tiszta binárisból decimálisba való konverzió bonyolult, és a szorzási vagy osztási műveletek használatát igényli, és pontosság is kérdéses. Több PC BIOS-a a dátum- és idő értéket BCD formában tárolja és kezeli, valószínűleg történeti okokból, (hogy elkerüljék a ASCII konverziót.)
[szerkesztés] BCD az elektronikában
A BCD nagyon elterjedt az elektronikában, ahol numerikus értékeket kell megjeleníteni, és erre csak a rendszreben digitális logika, és mikroprocesszor nem áll rendelkezésre. A BCD használatával a megjelenítendő számjegyek kezelése sokkal egszerűbb, minden számjegyhez egy saját, és számjegyenként azonos logika tartozik, a szokásos 7 szegmens kijelzők is egy ilyen rendszerhez illeszthetők egyszerűen. Ha a numerikus értéket tisztán binárisan tárolná és kezelné a rendszer, akkor a megjelenítéshez egy komplex áramköri logika kellene, gondoskodni kellene a felesleges nullák elnyomásáról stb. Fentiek miatt a BCD kódolás cészerűsége, a viszonylag egyszerű aritmetika széleskörű elterjedtséget biztosít az elektronikában a tiszta bináris ábrázolással szemben.
Hasonló érvek hozhatók fel akkor is, ha úgynevezett "beágyazott" mikrokontrollert vagy mikroprocesszort is tartalmaz az áramkör. Kevesebb kód szükséges a BCD kezeléséhez, a konverziókhoz a kijelzés egyszerűbb. Fentiek miatt néhány mikrokontroller és mikroprocesszor rendelkezik már direkt BCD utasításokkal, amivel tovább egyszerűsíthető a BCD kódolású adatok kezelése.
[szerkesztés] Tömörített vagy pakolt – packed – BCD
Széles körben elterjedt variáció a két-számjegy-per-byte kódolás, amely "pakolt BCD" vagy "tömrített BCD" néven közismert. Itt a szám a számjegyeket és végén az előjelet jelenti: általában 1100 a pozitív és 1101 a negatív. Pakolt BCD formában a 127-et a 00010010 01111100 byte-ok jelentik, és a mínusz 127-et pedig a 00010010 01111101.
Ugyan a tömörített BCD nem optimális a tárolás szempontjából (nagyjából a rendelkezésre álló terület 1/6-a veszteség a tömörített BCD esetében) az EBCDIC és ASCII konverzió, valamint a Unicode különböző változataiba való konverzió egyszerű, nem igényel külön aritmetikai lépéseket. Léteznek nagyobb tömörítettségű BCD változatok, itt a tárterület kihasználtsága optimáis, szintén nem igényelnek járulékos aritmetikai műkeleteket a legtöbb konverzióhoz.
[szerkesztés] Nagy sűrűségű kódolás
Ha egy decimális számjegyhez 4 bit szükséges, akkor három decimáls jegyhez 12 bit kell. Mivel 210>103, akkor 3 decimális jegy együttes konverziója csak 10 bitet igényel. A Chen-Ho kódolás és a Densely tömörített decimális ilyen típusú kódolás. Nagy előnye, hogy két számjegy esetében az optimális 7 bitet, míg 1 számjegy esetén 4 bitet ihasznál, mint a szabályos BCD.
[szerkesztés] IBM és a BCD
Az IBM használta a binárisan kódolt decimális és a BCD kifejezést egy hat bites úgynevezett alfamerikus kódra, amely a számokat, a nagybetűket és speciális karaktereket kezelt. Az IBM korai gépeiben a BCD néhány variánsát használta, mint az IBM 1620, IBM 1400 series és az IBM 700/7000 sorozatának nem-decimális architektúrájú tagjai. Az IBM System/360, sorozat megjelenésekor tért át az IBM BCD a 8-bites EBCDIC-re.
Ennél a BCD formánál a biteket az B, A, 8, 4, 2 és 1 cimkékkel látták el. Számok kódolása esetében B és A nulla értékű. A A betű kódja (B,A,1).
A 1620 BCD alfamerik esetében számpárokat használtak, a páratlan jegyeket a "zóna – zone" esetében, és páros jegyeket a "számjegy-digit" esetében. A ki/bevitel esetén a hardver konvertálta a belső jegyeket a külső, szabályos hat-bites BCD kódra, és vissza.
A decimális architektúrájú IBM 7070, IBM 7072, és IBM 7074 alfamerik kódolásnál a számpárokat használták (a kettő-az-ötből kódot használtak, és nem BCD-t) a 10-jegyes szavakhoz, a "zona" a bal jegyeket, a "számjegy" pedig a jobb jegeket jelentette. A ki/beviteli konverziókat szintén hardver végezte.
[szerkesztés] BCD összeadás
Egy összeadás végrehajtásához a BCD kódok között először össze kell adni binárisan a 4 bites számokat, majd esetleg egy konverziót kell még elvégezni, hogy a helyes eredményt megkapjuk. A konverzió abból áll, hogy minden olyan csoportra, ahol az összeadás után az eredmény nagyobb volt, mint 9, hozzá kell még adni az eredményhez 6-ot. Például:
- 9+6=15 = [1001] + [0110] = [1111] binárisan.
Binárisan az edemény nem lehet nagyobb, mint 9 (nibble-nként), ezért korrekcióként a csoporthoz hozzá kell adni még 6-ot:
- 15+6 = [0000 1111] + [0000 0110] = [0001 0101]
ami eredményül már két nibble-t ad, [0001]-et és [0101] ami pontosan az "1" és "5" megfelelője. Így a BCD összeadás a helyes eredményt adja.
Lásd még Douglas Jones' Tutorial.
[szerkesztés] Háttér
A következő táblázatban a legismertebb BCD kódolási formákat ábrázoljuk, a teljesség igénye nélkül. A BCD 8421-re gyakran hivatkoznak, mint egyszerű binárisan kódolt decimális – Simple Binary-Coded Decimal (SBCD) vagy BCD 8421. Használják még a NBCD rövidítési is, ami a Natural Binary-Coded Decimal – természetes binárisan kódolt decimális rövidítése.
A táblzat fejlécében a '8 4 2 1' mutatja a bitek súlyait; meg kell jegyezn, hogy az 5. oszlopban két súly negatív.
A következő táblázat a decimális 0 és 9 közé eső számokat ábrázolja a különböző BCD rendszerekben:
Számjegy | BCD 8 4 2 1 |
Excess-3 vagy Stibitz kód |
BCD 2 4 2 1 vagy Aiken kód |
BCD 8 4 −2 −1 |
IBM 702 IBM 705 IBM 7080 IBM 1401 8 4 2 1 |
---|---|---|---|---|---|
0 | 0000 | 0011 | 0000 | 0000 | 1010 |
1 | 0001 | 0100 | 0001 | 0111 | 0001 |
2 | 0010 | 0101 | 0010 | 0110 | 0010 |
3 | 0011 | 0110 | 0011 | 0101 | 0011 |
4 | 0100 | 0111 | 0100 | 0100 | 0100 |
5 | 0101 | 1000 | 1011 | 1011 | 0101 |
6 | 0110 | 1001 | 1100 | 1010 | 0110 |
7 | 0111 | 1010 | 1101 | 1001 | 0111 |
8 | 1000 | 1011 | 1110 | 1000 | 1000 |
9 | 1001 | 1100 | 1111 | 1111 | 1001 |
[szerkesztés] Jogi vonatkozása
1972-ben, az USA Legfelső Bírósága felülbírálta egy alsóbb fokú bíróság döntését, amelyik megengedte egy BCD kódolású számok egy számítógépre történő bináris konverziójának szabadalmaztatását. (lásd: Gottschalk v Benson). Ez egy nagyon fontos eset volt egy szoftver vagy algoritmus szabadalmaztathatóságának meghatározásánál.
[szerkesztés] A tiszta binárissal való összehasonlítás
[szerkesztés] Előnyei
- A 10-el vagy 10 hatványaival történő szorzás egyszerű, a tizedesek és egészek kezelése lényegében megegyezik a megszokottal.
- Kerekítés egyszerűen végrehajtható.
- A karakter formátumra való konverzió vagy megjelenítés (u.m. szöveg alapú formátumok, mint pl. XML, vagy 7 szegmens kijelző meghajtása megjelenítésnél) sokkal egyszerűbb, mint mint tiszta bináris tárolás esetében.
[szerkesztés] Hátrányai
- Több aritmetikai művelet megvalósítása bonyolultabb, mint a tiszta bináris esetében. Az összeadók esetében külön logika kell az átvitelek vizsgálatához és kezeléséhez. Hozzávetőlegesen 15-20%-kal több áramkört igényel a tiszta binárissal összehasonlítva. A szorzási algoritmus sokkal komplexebb, mint a tiszta binárisnál használt léptetés-maszkolás-összeadás (egy bináris szorzáshoz léptető és összeadó egységek szükségesek, számjegyenként vagy számjegy csoportonként).
[szerkesztés] Lásd még
- Chen-Ho kódolás
- Densely tömörített decimális
- Gray kód
[szerkesztés] Egyéb, külső hivatkozások
[szerkesztés] Egyéb információk, refernciák
- http://www.danbbs.dk/~erikoest/bcd.htm
- Schmid, Hermann, Decimal computation. New York, Wiley, 1974
- Lásd még Decimal Arithmetic Bibliography
- Fundamentals of Digital Logic by Brown and Vranesic, 2003