# 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.

## [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

- IBM: Chen-Ho encoding
- IBM: Densely Packed Decimal.

## [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

A lap eredeti címe "http://hu.wikipedia.org../../../b/i/n/Bin%C3%A1risan_k%C3%B3dolt_decim%C3%A1lis.html"

Kategóriák: Számítástechnika | Számrendszerek

##### Views

- Szócikk
- Vitalap
- Aktuális változat

##### Keresés

##### Más nyelveken

- English
- Česky
- Dansk
- Deutsch
- Español
- Français
- עברית
- Italiano
- 日本語
- Nederlands
- Polski
- Português
- Slovenčina
- Svenska
- ไทย
- 中文