BCD - Binary-coded decimal


z Wikipedie, otevřené encyklopedie
Binární hodiny mohl použít LED vyjádřit binární hodnoty. V této hodiny, každý sloupec LED diod ukazuje BCD číslice tradičního sexagesimal času.

Při práci na počítači a elektronických systémů, BCD ( BCD ) je třída binární kódování ze desetinných čísel, kde každé desítkové číslice je reprezentována pevný počet bitů , obvykle čtyři nebo osm. Speciální bitové vzory jsou někdy používány pro znak nebo pro jiné indikace (např odchylky nebo přetečení).

V byte orientované systémy (tj většina moderních počítačů), termín rozbalené BCD obvykle předpokládá úplný bajt pro každou číslici (často bez znamení), zatímco balené BCD typicky kóduje dvě desetinná místa v rámci jednoho bajtu s využitím skutečnosti, že čtyři bity jsou dostatečně reprezentovat rozsah 0 až 9. přesný 4-bitové kódování však může měnit, z technických důvodů, viz přebytku 3 např. Deset států představující BCD desítkovou číslici jsou někdy označovány jako tetrades (pro okusovat obvykle potřebné k jejich držení také známý jako tetrády ) s těmi, nezajímá -states nevyužitý názvem pseudo-tetráda (e) y  [ de ] nebo pseudo-desetinné místo číslice ).

Hlavní přednost BCD je jeho přesnější znázornění a zaoblení desetinných množství, stejně jako snadné konverze do lidských čitelného reprezentací, v porovnání s binární polohových systémů . Hlavními nedostatky BCD jsou malé zvýšení složitosti obvodů potřebných pro provádění základních aritmetika a o něco méně hustý skladování.

BCD byla použita v mnoha brzy desetinných počítačů , a je implementována v instrukční sadě strojů, jako jsou IBM System / 360 série a jeho potomků, Digital Equipment Corporation je VAX a Motorola 68000 -series procesorů. Ačkoli BCD samo o sobě není tak široce používán jako v minulosti a je již implementován v instrukční sady novějších počítačů (jako ARM , x86 nepodporuje své BCD pokynů v dlouhodobém režimu nic víc), desetinné pevným bodem a s plovoucí bodové formáty jsou stále důležité i nadále používány ve finanční, obchodní a průmyslové výpočetní techniky, kde subtilní konverze a zlomkové zaokrouhlení chyby nemohou být tolerovány, které jsou inherentní s plovoucí desetinnou čárkou binární reprezentace.

Základy

BCD využívá k tomu, že některý jedno desetinné číslice mohou být reprezentovány čtyři vzorku bitů. Nejzřejmější způsob kódování číslic je „přirozený BCD“ (NBCD), kde je každá desetinné místo zastupuje její odpovídající čtyřbitové binární hodnotu, jak je ukázáno v následující tabulce. To je také nazýván kódování „8421“.

desítková číslice BCD
8 4 2 1
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1

Jiné kódování jsou také používány, včetně tak zvané „4221“ a „7421“ -named po vážení používané pro bity a „ Přebytek-3 “. Například BCD číslice 6, '0110'b v 8421 zápisu, je' 1100'b v 4221 (dva kódování jsou možné), '0110'b v 7421, a' 1001'b (6 + 3 = 9) nadbytek-3.

Jako většina počítačů vypořádat s údaji v 8-bitových bytů , je možné použít jednu z následujících metod k zakódování čísla BCD:

  • Rozbalený : Každá číslice je zakódován do jeden bajt, se čtyřmi bity představující číslici a zbývající bity, které nemají význam.
  • Balíčky : dvě číslice jsou zakódovány do jednoho bajtu, s jedním číslem v nejméně významné nibble (bity 0 až 3), a druhá číslice v nejvýznamnější půlbajtu (bity 4 až 7).

Jako příklad, kódující desetinné číslo 91 pomocí rozbalené výsledky BCD v následující binární vzor dva bajty:

 Decimal:          9          1
 Binary :  0000 1001  0000 0001

V balených BCD, stejný počet by se vešly do jednoho bajtu:

 Decimal:     9    1
 Binary :  1001 0001

Proto je číselná řada pro jednu nebalený BCD bytu je nula až devět inkluzivní, zatímco rozsah pro jeden naplněné BCD je nula až devadesát devět inclusive.

Představovat čísla větší než rozsah jednoho bajtu může být použit jakýkoliv počet souvislých bajtů. Například reprezentovat desetinné číslo 12345 v zabalené BCD pomocí big-endian formátu, program by kódovat takto:

 Decimal:     0    1     2    3     4    5
 Binary :  0000 0001  0010 0011  0100 0101

Zde je nejvýznamnější okusovat nejvýznamnějšího bajtu byl zakódován jako nula, takže číslo je uloženo jako 012345 (ale formátovacích rutin by mohl nahradit nebo odebrat počáteční nuly). Zabalené BCD je efektivnější využití úložného prostoru, než nebalené BCD; kódující stejné číslo (s nulou) v rozbaleném formátu by spotřeboval dvojnásobek skladování.

Posouvání a maskovací operace se používají k balení nebo rozbalit zabalené BCD číslice. Další bitové operace se používají k převedení číslice na jeho ekvivalentní bitového vzoru nebo zvrácení procesu.

BCD v elektronice

BCD je velmi časté v elektronických systémech, kde je číselná hodnota, která se zobrazí, a to zejména v zařízení sestávající pouze z digitální logiky, a nikoli obsahuje mikroprocesor. Použitím BCD, manipulace numerických dat pro zobrazení může být značně zjednodušen ošetřením každou číslici jako jediné samostatné dílčí obvod. To odpovídá mnohem těsněji fyzickou realitu zobrazovacího hardwaru-projektant může zvolit použít řadu samostatných identických displejů sedmisegmentovým postavit měření obvodu, např. Je-li číselná množství byly uloženy a manipulovat s nimi jako čisté binární, rozhraní pro takové zobrazení by vyžadovalo složité obvody. Proto v případech, kdy se výpočty jsou poměrně jednoduché, pracuje po celou dobu s BCD může vést k jednoduššímu celkového systému konverze do a z binární. Většina kapesní kalkulačky dělat všechny své výpočty v BCD.

Stejný argument platí, když hardware tohoto typu používá vestavěný mikroprocesor nebo jiný malý procesor. Často má za následek menší kód při zastupování čísla interně ve formátu BCD, protože převod z nebo do binárního znázornění může být drahé na takových omezených procesory. Pro tyto aplikace, některé malé procesory jsou vybaveny BCD aritmetické režimy, které jsou nápomocny při psaní rutin, které manipulují BCD množství.

zabalené BCD

V balené BCD (nebo jednoduše balené desetinná ), každé ze dvou kousíčky každého bytu představovat desítkovou číslici. Zabalené BCD byl v použití protože přinejmenším 1960 a je realizován ve všech IBM mainframe hardware od té doby. Většina implementací jsou big endian , tedy s více významné číslice v horní polovině každého bytu, a bajtu nejvíce vlevo (se sídlem na nejnižší adresu paměti), která obsahuje nejvýznamnější číslice balené desetinnou hodnotu. Spodní půlbyte nejpravější bytu se obvykle používá jako znamení vlajka, ačkoli některé nepodepsané reprezentace postrádají znaménko vlajky. Jako příklad, je hodnota, 4-byte se skládá z 8 křupky, vyznačující se tím, že horní 7 křupky uložit číslice 7-místným desetinnou hodnotu a nejnižším půlbajtu indikuje znaménko desetinné celočíselnou hodnotu.

Standardní znaménko hodnoty jsou 1100 ( hex C) pro pozitivní (+) a 1101 (D) pro negativní (-). Tato konvence pochází z oblasti zóny pro EBCDIC znaky a podepsané overpunch reprezentace. Dalšími příznaky jsou povolené 1010 (A) a 1110 (E), pro pozitivní a 1011 (B) pro negativní. IBM System / 360 procesory budou používat (A) a 1011 (B) označení, 1010, je-li A bit nastaven v PSW, pro standard ASCII-8, které nikdy prošel. Většina implementací také bez znaménka hodnoty BCD se znakem půlbyte 1111 (F). ILE RPG používá 1111 (F) pro pozitivní a 1101 (D) pro negativní. Ty odpovídají EBCDIC zónu číslicemi bez znaménka overpunch. V balených BCD, číslo 127 představuje 0001 0010 0111 1100 (127 ° C) a -127 je reprezentována 0001 0010 0111 1101 (127d). Burroughs systémy používají 1101 (D) pro negativní, a všechny další hodnoty se považuje za pozitivní, hodnota (procesory se normalizovat kladné znaménko, 1100 (C)).

Sign
Digit
BCD
8 4 2 1
Podepsat Poznámky
A 1 0 1 0 +  
B 1 0 1 1 -  
C 1 1 0 0 + Preferované
D 1 1 0 1 - Preferované
E 1 1 1 0 +  
F 1 1 1 1 + Nepodepsaný

Bez ohledu na to, kolik bajtů nejširším slova znamená, že tam jsou vždy sudý počet kousíčky, protože každý bajt má dva z nich. Proto slovo n bajtů může obsahovat až 2 ( n ) -1 desetinná místa, což je vždy lichý počet číslic. Desetinné číslo s d číslicemi vyžaduje 1 / 2 ( d + 1) bajtů úložného prostoru.

Například, 4-byte (32 bitů) slovo může držet sedm desetinná místa plus znaménko, a může představovat hodnoty od ± 9,999,999. Proto je počet -1234567 je 7 číslic široká a je kódován jako:

0001 0010 0011 0100 0101 0110 0111 1101
1    2    3    4    5    6    7    −

Stejně jako řetězce znaků, první bajt zabaleného desetinné čárky - které s nejvýznamnějšími dvě číslice - je obvykle uložen v nejnižším adresu v paměti, bez ohledu na endianness stroje.

V kontrastu, 4-bajt binární dvě části celé číslo může představovat hodnoty z -2,147,483,648 do +2,147,483,647.

Zatímco zabalené BCD neumožňuje optimální využití úložného prostoru (asi jedna šestina použité paměti je zbytečná), konverze do ASCII , EBCDIC nebo různé kódování pro Unicode je stále triviální, neboť nejsou zapotřebí žádné aritmetické operace. Další požadavky na skladování jsou obvykle kompenzován potřebou přesnosti a kompatibilitě s kalkulačkou nebo ručním výpočtem, že s pevnou řádovou čárkou desítkové aritmetické poskytuje. Hustší obalu BCD existují opatření, která zabrání trest pro uložení a také potřeba žádné aritmetické operace pro běžné převody.

Zabalené BCD je podporována v COBOL programovacím jazyce jako „Computational-3“ (rozšíření IBM přijatý mnoha dalšími dodavateli kompilátoru) nebo „zabalené“ DECIMAL (část 1985 COBOL standardu) datový typ. To je podporováno v PL / I jako „pevný počet desetinných“. Kromě IBM System / 360 a později kompatibilních sálových počítačů, zabalené BCD je implementována v nativním instrukční sadě původních VAX procesorů od firmy Digital Equipment Corporation a některých modelů řady SDS Sigma sálových počítačů, a je nativní formát pro Burroughs Corporation média Systems řada sálových počítačů (pocházející z 1950 Electrodata 200 série ).

Deset doplňovala reprezentace záporných čísel nabídnout alternativní přístup ke kódování znamení sbalené (a dalších) čísly BCD. V tomto případě, pozitivní čísla mají vždy nejvyšší hodnotou mezi 0 a 4 (včetně), zatímco záporná čísla jsou reprezentovány 10 je doplňkem k příslušné kladné číslo. Výsledkem je, že tento systém umožňuje, čísel 32-bit balené BCD v rozmezí od -50,000,000 do +49,999,999, a -1 je reprezentován jako 99999999. (Stejně jako dvě části binární čísla, rozsah není symetrická kolem nuly).

Fixed-point zabalené desítková

Fixed-point desetinná čísla jsou podporovány některých programovacích jazyků (například COBOL , PL / I a Ada ). Tyto jazyky umožňují programátorovi určit implicitní desetinnou čárku v přední části jedné z číslic. Například, balené desítková hodnota kódována bajtů 12 34 56 7C představuje pevnou řádovou čárkou hodnota +1,234.567 když je implicitně desetinná bod nachází mezi 4. a 5. číslic:

12 34 56 7C
12 34.56 7+

Desetinnou čárkou není ve skutečnosti uložena v paměti, jak se balí formát úložiště BCD neposkytuje za to. Jeho poloha je prostě známý kompilátoru a vygenerovaný kód se chová podle toho pro různé aritmetické operace.

kódování s vyšší hustotou

-Li číslo v desítkové soustavě vyžaduje čtyři bity, pak tři desetinná místa vyžaduje 12 bitů. Vzhledem k tomu, 2 10 (1024), je větší než 10 3 (1000), je-li tři desetinná místa jsou kódovány dohromady, je zapotřebí pouze 10 bitů. Dvě takové kódování je kódování Chen-Ho a hustý desítkové (DPD). Ten má tu výhodu, že podmnožiny kódování kódují dvě číslice v optimálních sedm bitů a jedna číslice čtyř bitů, stejně jako v pravidelných BCD.

Zoned desítkové

Některé implementace, například IBM mainframe systémů, podpora pásmový desítkové číselné vyjádření. Každý desítkové číslice je uložena do jeden bajt, se spodní čtyři bity kódující číslici BCD formě. Horní čtyři bity, nazvaný „zónou“ bity jsou obvykle nastavena na pevnou hodnotu tak, že byte má hodnotu znaku odpovídající číslicí. EBCDIC systémy používají hodnotu zóně 1111 (hex F); to vede bajtů v rozmezí F0 až F9 (Hex), které jsou EBCDIC kódy pro znaky „0“ až „9“. Podobně ASCII systémy používají hodnotu zóně 0011 (hex 3), přičemž znakové kódy 30 až 39 (hex).

Pro podepsaných zónovaných desítkové hodnoty, nejvíce vpravo (nejméně významné) zóna okusovat drží znamení číslice, což je stejný soubor hodnot, které jsou používány pro podepsané balených desetinných čísel (viz výše). Tak pásmový desítková hodnota kódována jako hex bajtů F1 F2 D3 představuje podepsanou desítková hodnota -123:

F1 F2 D3
 1  2 −3

EBCDIC pásmový desítkové převodní tabulka

BCD Digit hexadecimální EBCDIC Character
0+ C0 A0 E0 F0 { (*)   \ (*) 0
1+ C1 A1 E1 F1 A ~ (*)   1
2+ C2 A2 E2 F2 B s S 2
3+ C3 A3 E3 F3 C T T 3
4+ C4 A4 E4 F4 D u U 4
5+ C5 A5 E5 F5 E proti PROTI 5
6+ C6 A6 E6 F6 F w W 6
7+ C7 A7 E7 F7 G X X 7
8+ C8 A8 E8 F8 H y Y 8
9+ C9 A9 E9 F9 z Z 9
0- D0 B0     }  (*) ^  (*)    
1- D1 B1     J      
2- D2 B2     K      
3- D3 B3     L      
4- D4 B4     M      
5- D5 B5     N      
6- D6 B6     Ó      
7- D7 B7     P      
8- D8 B8     Q      
9- D9 B9     R      

(*) Poznámka: Tyto znaky se liší v závislosti na lokální charakter kódové stránce nastavení.

S pevnou řádovou čárkou pásmový desítková

Některé jazyky (například COBOL a PL / I ) přímo podporují pevnou řádovou čárkou pásmový desítkové hodnoty, přiřazení implicitní desetinné čárky v určitém místě mezi desetinných míst řady. Například daný šesti bajtů podepsané pásmový desítková hodnota se implicitně desetinné čárky napravo od čtvrtého prstu, hexadecimální bajty F1 F2 F7 F9 F5 C0 představují hodnotu +1,279.50:

F1 F2 F7 F9 F5 C0
 1  2  7  9. 5 +0

IBM a BCD

IBM používá termíny BCD Interchange kód (BCDIC, někdy jen volal BCD), pro 6-bitových alfanumerické kódy, které představovaly čísla, velká písmena a speciální znaky. Některé variace BCDIC alphamerics se používá ve většině časných počítačů IBM, včetně IBM 1620 , IBM 1400 série , a jiných než Desetinné architektura členy řady IBM 700/7000 .

Řady IBM 1400 jsou znak adresovatelné stroje, každé místo je šest bitů označených B, A, 8, 4, 2 a 1, a zvláštní kontrola bit parity ( C ) a bitové slovo značka ( M ). Pro kódování číslic 19 , B a jsou nulové, a hodnoty číslo reprezentován standardním 4-bitové BCD v bitech 81 . Pro většinu ostatních znaků bity B a jsou odvozeny pouze z „12“, „11“ a „0“, „zóny údery“ v děrované kód znaku karta, a bity 81 z 19 údery. A "12 zóna" punč nastavit jak B a A , je "11" zóna set B a "0 zóny" (A 0 děrování kombinovat s ostatními) nastavena . Tak písmeno , který je (12,1) v děrované formátu karty, je kódován (B, A, 1) . Měna symbol $ , (11,8,3) v děrované karty, byla zakódována v paměti jako (B, 8,2,1) . To umožňuje obvody pro konverzi mezi nepovedla formátu karty a vnitřní formát úložiště je velmi jednoduché, jen s několika speciálních případech. Jedním z důležitých zvláštní případ je číslice 0 , zastupuje osamělý 0 razníku v kartě, a (8,2) na feritové paměti.

Paměť IBM 1620 je organizováno do 6-bitových adresovatelných číslic, obvyklý 8, 4, 2, 1 a navíc F , který se používá jako bitový příznak, a C , optická bitem pro kontrolu parity s. BCD alphamerics jsou kódovány pomocí číselných párů, s „zóny“ v i-adresovaného číslici a „číslice“ v liché adresou číslici „zóna“ se vztahuje k 12 , 11 a 0 „zóna razidly“, jak je v sérii 1400. Input / Output překlad hardware převedeny mezi vnitřními páry číslice a externí standardní 6-bitové BCD kódy.

V desítkové Architecture IBM 7070 , IBM 7072 , a IBM 7074 alphamerics jsou kódovány pomocí číselných párů (za použití dvou-out-of-pět kód v číslicemi, není BCD) v 10-ti slova s „zóny“ V levá číslice a „číslice“ v pravém číslici. Input / Output překlad hardware převedeny mezi vnitřními páry číslice a externí standardní 6-bitové BCD kódy.

Se zavedením systému / 360 , IBM rozšířila 6-bitové BCD alphamerics až 8-bitové EBCDIC , což umožňuje přidávání mnoho dalších znaků (např malými písmeny). Proměnné délky Balíčky BCD číselný datový typ se také provádí, poskytuje strojové instrukce, které provádějí aritmetické přímo na sbalené desetinných dat.

Na IBM 1130 a 1800 , zabalené BCD je podporována v softwaru od IBM obchodního podprogramu balíčku.

Dnes BCD data stále intenzivně používá v procesorech a databází IBM, jako je IBM DB2 , sálové počítače a Power6 . V těchto produktech, BCD je obvykle pásmový BCD (jako v EBCDIC nebo ASCII), Balíčky BCD (dvě desetinná místa na byte ), nebo „čisté“ BCD kódování (jedno desetinné místo uloženy jako BCD v nízkých čtyři bity každého bajtu) , Všechny z nich jsou používány v rámci hardwarových registrů a zpracovatelských jednotek, a v softwaru. Chcete-li převést zabalené desetinných míst v EBCDIC tabulce uvolní do čitelné čísla, můžete použít OUTREC FIELDS masku utility DFSORT JCL.

Ostatní počítače a BCD

Digital Equipment Corporation VAX-11 série obsahuje pokyny, které mohou provádět aritmetické přímo na balené BCD dat a konverzi mezi zabalené BCD daty a dalšími celočíselné reprezentace. Zabalené BCD formát VAX je kompatibilní s IBM System / 360 a později kompatibilními procesory IBM. Implementace MicroVAX a později VAX klesl tuto schopnost od CPU ale udržel kompatibilitu kódu s dřívějšími stroji prováděním chybějící instrukce v operačním systému dodávané softwarové knihovny. To je automaticky vyvoláno pomocí zpracování výjimek, kdy jsou již realizované pokyny setkali, aby programy používající jich může provádět beze změny na novějších strojů.

Intel x86 architektura podporuje jedinečný 18-místné (ten-byte) BCD formátu , který může být vložen do a uloženou z plovoucí desetinnou čárkou registrů a výpočty mohou být prováděny tam.

Série Motorola 68000 měl instrukce BCD.

V novějších počítačích tyto možnosti jsou téměř vždy realizovány v softwaru, spíše než instrukční sady CPU, ale BCD číselná data jsou stále velmi běžné v obchodních a finančních aplikací. Existují triky pro provádění zabalené BCD a pásmová desetinná přidat nebo odebrat operace využívající krátké, ale těžké pochopit sekvence slovo paralelní logiku a binární aritmetické operace. Například následující kód (napsaný v C ) počítá nepodepsaný 8-místný zabalené BCD doplněk pomocí 32-bitové binární operace:

uint32_t BCDadd(uint32_t a,uint32_t b)
{
    uint32_t  t1, t2;    // unsigned 32-bit intermediate values

    t1 = a + 0x06666666;
    t2 = t1 ^ b;                   // sum without carry propagation
    t1 = t1 + b;                   // provisional sum
    t2 = t1 ^ t2;                  // all the binary carry bits
    t2 = ~t2 & 0x11111110;         // just the BCD carry bits
    t2 = (t2 >> 2) | (t2 >> 3);    // correction
    return t1 - t2;                // corrected BCD sum
}

Přídavek s BCD

Je možné provádět přidávání v BCD nejprve přidáním v binární, přičemž potom následuje převedení na BCD poté. Konverze prostý součet dvou číslic může být provedeno přidáním 6 (to znamená, že 16 - 10), když je pět bitů výsledkem přidání páru číslic má hodnotu větší než 9. Například:

1001 + 1000 = 10001
   9 +    8 =    17

10001 je binární, ne desítkové, znázornění požadovaného výsledku, ale nejvíce významný 1 ( „carry“) se nevejde ve 4-bitové binární číslo. V BCD jako v desítkové soustavě, nemůže existovat hodnotu větší než 9 (1001) na číslici. Pro nápravu tohoto stavu, 6 (0110), se přidá do celkové a pak výsledek se považuje za dvě křupky :

10001 + 0110 = 00010111 => 0001 0111
   17 +    6 =       23       1    7

Dvě křupky výsledku, 0001 a 0111, odpovídají číslice „1“ a „7“. Tím se získá „17“ v BCD, což je správný výsledek.

Tato technika může být rozšířena na přidání více číslic přidáním ve skupinách zprava doleva, šíření druhou číslici jako vysílat vždy porovnáním 5-bitový výsledek každého místné páru součtu až 9. Některé procesory poskytují příznak poloviny carry usnadnit BCD aritmetické úpravy následující binární sčítání a odčítání operace.

Odčítání s BCD

Odčítání se provádí přidáním deseti jeho doplněk na menšitel . Reprezentovat znaménko čísla v BCD, číslo 0000 se používá k reprezentaci kladné číslo , a 1001 se používá k reprezentaci záporné číslo . Zbývajících 14 kombinace jsou neplatné znaky. Pro ilustraci podepsaný BCD odčítání, zvažte následující problém: 357 - 432.

V podepsané BCD, 357 0000 0011 0101 0111. The doplňkem TEN je 432 lze získat tím, že v devíti doplňkem 432, a pak se přidá jeden. Tak, 999-432 = 567, a 567 + 1 = 568. Od předchozí 568 v BCD záporným znaménkem kód, číslo -432 může být reprezentován. Takže -432 v podepsaném BCD je 1001 0101 0110 1000.

Nyní, když obě čísla jsou zastoupeny v podepsaném BCD, mohou sčítat:

  0000 0011 0101 0111
     0    3    5    7
+ 1001 0101 0110 1000
     9    5    6    8
= 1001 1000 1011 1111
     9    8   11   15

Vzhledem k tomu, BCD je forma desítkové reprezentace, několik číslice sumy výše jsou neplatné. V případě, že (jakákoliv BCD číslice větší než 1001) existuje neplatný vstup, 6, který zní generovat carry bit a způsobit, že suma, aby se stala platná položka. Důvodem pro přidávání 6 je, že existuje 16 možných hodnot 4-bitové BCD (od 2 4 = 16), ale pouze 10 hodnoty platí (0000 až 1001). Takže přidáním 6 s neplatné položky výsledky v následující:

  1001 1000 1011 1111
     9    8   11   15
+ 0000 0000 0110 0110
     0    0    6    6
= 1001 1001 0010 0101
     9    9    2    5

Proto je výsledek odčítání je 1001 1001 0010 0101 (-925). Pro potvrzení výsledku, na vědomí, že první číslice je 9, což znamená negativní. To se zdá být v pořádku, protože 357-432 by mělo vést k záporným číslem. Zbývající křupky jsou BCD, takže 1001 0010 0101 je 925. The TEN doplňkem ze 925 1000-925 = 75, takže vypočítá odpověď je -75.

Pokud existuje jiný počet nibbles se sčítají (například 1053 - 2), číslo s menším počtem číslic musí být nejprve předponou nulami před přijetím na deseti doplňku nebo odečtením. Takže s 1053 - 2, 2 by musely být nejprve reprezentován jako 0002 v BCD, a doplňkem TEN je o 0002 by musela být vypočtena.

Pozadí

Binární kódované desítkové schéma popsané v tomto článku je nejběžnější kódování, ale existuje mnoho dalších. Způsob zde může být označován jako jednoduchý BCD ( SBCD ) nebo BCD 8421 . Následující tabulka představuje desítkové číslice od 0 do 9 v různých BCD systémech. V záhlaví do tabulky, ‚ 8 4 2 1‘, označuje hmotnost každého bitu je znázorněno; v pátém sloupci, „BCD 8 4 -2 -1“, dvě závaží jsou negativní. Jak ASCII a EBCDIC znakové kódy číslicemi jsou příklady pásmový BCD, a jsou také uvedeny v tabulce.

 
Číslice
BCD
8 4 2 1
Stibitz  Code nebo Přebytek-3 Aiken-Code nebo BCD
2 4 2 1
BCD
8 4 -2 -1
IBM 702 , IBM 705 , IBM 7080 , IBM 1401 8 4 2 1 ASCII 0000 8421 EBCDIC 0000 8421
0 0000 0011 0000 0000 1010 0011 0000 1111 0000
1 0001 0100 0001 0111 0001 0011 0001 1111 0001
2 0010 0101 0010 0110 0010 0011 0010 1111 0010
3 0011 0110 0011 0101 0011 0011 0011 1111 0011
4 0100 0111 0100 0100 0100 0011 0100 1111 0100
5 0101 1000 1011 1011 0101 0011 0101 1111 0101
6 0110 1001 1100 1010 0110 0011 0110 1111 0110
7 0111 1010 1101 1001 0111 0011 0111 1111 0111
8 1000 1011 1110 1000 1000 0011 1000 1111 1000
9 1001 1100 1111 1111 1001 0011 1001 1111 1001

Právní dějiny

V 1972 případě Gottschalk v. Benson , americký nejvyšší soud zrušil nižší soudní rozhodnutí, které bylo povoleno patent pro konverzi BCD kódovaná čísla binární na počítači. To byl důležitý případ stanovení patentovatelnosti software a algoritmů.

Srovnání s čistým binární

Výhody

  • Mnoho neintegrálních hodnoty, jako desetinné 0,2, mají nekonečnou reprezentaci místo-hodnota v binárním (.001100110011 ...), ale mají konečný místo hodnotu v BCD (0,0010). V důsledku toho je systém založený na BCD reprezentace zlomky zabraňuje chybám, které představují a výpočet těchto hodnot. To je užitečné ve finančních výpočtech.
  • Škálování o síle 10 je jednoduchá.
  • Zaokrouhlení na desetinná místa hranice je jednodušší. Sčítání a odčítání v desítkové soustavě nevyžaduje zaokrouhlení.
  • Vyrovnání dvě desetinná čísla (například 1,3 + 27,08) je jednoduchý, přesný, posun.
  • Konverze do podoby znaku nebo pro zobrazení (např, do formátu textového bázi, jako je XML , nebo řídit signály pro sedmisegmentovým displejem ) je jednoduchá mapování za číslici, a může být provedeno v lineární ( O ( n )) čas. Konverze z čistého binárního zahrnuje poměrně složitou logiku, která pokrývá číslic, a pro velký počet není algoritmus konverze lineární čase známa (viz Binární číslice systém § konverze do jiných číselné soustavy ).

nevýhody

  • Některé operace jsou složitější realizovat. Zmije vyžadují zvláštní logiku, přimět je, aby zabalit a generovat carry brzy. 15 až 20 procent větší obvod je potřebné pro BCD doplňku srovnání s čistým binární. Násobení vyžaduje použití algoritmů, které jsou o něco složitější než řadicí-masky-doplňku (v binární násobení , vyžaduje binární směny a přidá nebo ekvivalent, za číslici nebo skupiny čísel je nutná)
  • Standardní BCD vyžaduje čtyři bity na číslici, asi 20 procent více prostoru než binárního kódování (poměr 4 bity pro přihlášení 2 10 bitů je 1,204). Když jsou zabaleny tak, že tři číslice jsou zakódovány v deseti bitů, skladování režie je značně snížena, na úkor s kódování, které je nezarovnaný s 8-bitových bajtů hranice běžných stávajících hardware, což má za následek pomalejší implementacích v těchto systémech.
  • Praktické existující implementace BCD jsou obvykle pomalejší než operace na binární reprezentací, a to zejména na vestavěné systémy, z důvodu omezené podpoře procesoru pro nativní operace BCD.

aplikace

BIOS v mnoha osobních počítačů ukládá datum a čas v BCD, protože MC6818 real-time clock čip použitý v originálním IBM PC AT desky za předpokladu, že čas zakódované v BCD. Tato forma je snadno přeměnit na ASCII pro zobrazení.

Atari 8-bit family počítačů používá BCD realizovat s plovoucí desetinnou čárkou algoritmy. 6502 MOS procesor má režim BCD, která ovlivňuje instrukce sčítání a odčítání. Na Psion Organizer 1 software dodaný výrobcem kapesní počítač je také používán výhradně BCD realizovat s plovoucí desetinnou čárkou; později použitý Psion modely binární exkluzivně.

Časné modely PlayStation 3 obchodu datum a čas v BCD. To vedlo k celosvětovému výpadku konzoly dne 1. března 2010. Poslední dvě číslice roku uloženy jako BCD byly chybně interpretovány jako 16 způsobuje chybu v datu jednotky, čímž většinu funkcí nefunkční. To byl jen problém roku 2010 .

reprezentační variace

Různé BCD implementace existují to používat jiné reprezentace čísel. Programovatelné kalkulačky vyrobené Texas Instruments , Hewlett-Packard , a dalších typicky využívají plovoucí desetinnou čárkou formátu BCD, obvykle dvě nebo tři číslice pro (desítkově) exponent. Extra bitů znamení číslice mohou být použity k označení speciální číselné hodnoty, jako je nekonečno , podtečení / přetečení a chyby (blikající displej).

podepsané variace

Podepsané desetinné hodnoty mohou být zastoupeny v několika způsoby. COBOL programovací jazyk, například podporuje celkem pět zónovaných desetinných formátů, každý z nich kóduje číselné znamení jiným způsobem:

Typ Popis Příklad
Nepodepsaný Žádné známky okusovat F1 F2 F3
Podepsané trailing (kanonický formát) Znamení čtyři bity v posledním (nejméně významné) byte F1 F2 C3
Podepsané vedoucí (overpunch) Znamení čtyři bity v prvním (nejvýznamnější) bajtu C1 F2 F3
Podepsané zadní samostatná Samostatný znak znak byte ( '+'nebo '−') po číselných bajtů F1 F2 F3 2B
Podepsané vedoucí samostatnou Samostatný znak znak byte ( '+'nebo '−') předcházející číselných bajtů 2B F1 F2 F3

Telefonie BCD (TBCD)

3GPP vyvinuté TBCD , expanze do BCD, kde jsou použity zbývající (nepoužitý) bitové kombinace přidat specifické telefonní znaky, s číslicemi podobné těm v telefonní klávesnici původní konstrukce.

desítková
číslice
TBCD
8 4 2 1
* 1 0 1 0
# 1 0 1 1
A 1 1 0 0
b 1 1 0 1
C 1 1 1 0
Používá se jako plnivo když je lichý počet číslic 1 1 1 1

Uvedený dokument 3GPP definuje TBCD-string prohození křupky na každý byte. Bity, oktety a číslice indexovaných od 1, bity zprava, číslic a oktetů zleva.

bity 8765 o oktet n kódování číslice 2n

bity 4321 o oktet n kódování číslice 2 (n-1) +1

Znamenat číslo 1234, by se stal 21 43v TBCD.

Alternativní kódování

Pokud jsou důležitější, než je rychlost konverze do a ze zobrazení chyby v reprezentaci a výpočtu, může být zmenšen binární reprezentace používán, který ukládá desetinné číslo jako binární celé číslo kódované a binárním kódováním podepsané desetinné exponentem. Například 0,2 může být reprezentován jako 2 x 10 - 1 .

Tato reprezentace umožňuje rychlé násobení a dělení, ale může vyžadovat přechod od výkonu 10 při sčítání a odčítání sladit desetinných míst. Je vhodné pro aplikace s pevným počtem desetinných míst, které nejsou pak musí být tato úprava, zejména finanční aplikace, kde 2 nebo 4 číslice za desetinnou čárkou jsou obvykle dost. Ve skutečnosti je to téměř o formu pevné řádové čárce , protože poloha radix bodu je samozřejmostí.

Kódování Chen-Ho poskytuje logickou transformaci pro konverzi skupiny tří BCD-kódovaných číslic, a 10-bitové hodnoty, které mohou být účinně zakódovaných v hardwaru pouze 2 nebo 3 brány zpoždění. Hustý desítkové (DPD) je obdobný systém, který se používá pro většinu z mantisy , s výjimkou olova číslice, pro jednu ze dvou alternativních desetinná kódování specifikovaných v IEEE 754-2008 standardu.

viz též

Poznámky

Reference

Další čtení

externí odkazy