Hlavní navigace

Binární reprezentace numerických hodnot v FX formátu

28. 6. 2006
Doba čtení: 9 minut

Sdílet

V šesté části seriálu si podrobněji popíšeme čtyři základní formy uložení číselných hodnot v operační paměti počítače, včetně významu jedničkového a dvojkového doplňku při práci se zápornými hodnotami. Také si řekneme, jakými vlastnostmi oplývají čísla uložená v této formě.

Obsah

1. Čtyři základní formy binární reprezentace číselných hodnot
2. Kladná čísla s pevnou řádovou binární čárkou
3. Celá kladná čísla
4. Jedničkový doplněk
5. Dvojkový doplněk a čísla s pevnou řádovou binární čárkou
6. Základní vlastnosti čísel reprezentovaných v systému pevné řádové čárky
     6.1 Počet bitů
     6.2 Rozsah hodnot
     6.3 Platnost aritmetické operace součtu či rozdílu
     6.4 Rozsah výsledků po aritmetické operaci sčítání
     6.5 Rozsah výsledků po provedené aritmetické operaci násobení
     6.6 Počet bitů pro uložení výsledků provedené aritmetické operace dělení
     6.7 Operace bitového posunu
7. Obsah sedmého pokračování tohoto seriálu

1. Čtyři základní formy binární reprezentace číselných hodnot

V úvodní části tohoto seriálu jsme si popsali přednosti a zápory použití číselných hodnot uložených ve formátu pevné řádové binární čárky. Také jsme si stručně vysvětlili rozdíly mezi touto reprezentací (zkráceně nazývanou FX formát) a reprezentací číselných hodnot za použití plovoucí řádové binární čárky (FP formát). V dalším textu se již budeme zcela výhradně (resp. až na konverze mezi numerickými datovými typy) zabývat pouze FX formátem a stručně si popíšeme čtyři základní formy binární reprezentace číselných hodnot. Bude se jednat o způsob popisu:

  1. intervalu celých kladných čísel
  2. intervalu celých čísel zobrazených v dvojkovém doplňku
  3. kladných čísel ve formátu s pevnou řádovou binární čárkou
  4. čísel ve formátu s pevnou řádovou binární čárkou zobrazených ve dvojkovém doplňku

2. Kladná čísla s pevnou řádovou binární čárkou

V případě, že je N-bitové binární slovo (jinými slovy vektor N binárních číslic – bitů) interpretováno jako kladné číslo v reprezentaci s pevnou řádovou binární čárkou, je pomocí tohoto slova možné jednoznačně specifikovat hodnotu spadající do podmnožiny P1 racionálních kladných čísel. Tuto podmnožinu je možné definovat následovně:

P1={p/2b | 0 ≤ p ≤ 2N-1, p leží v Z+, b leží v Z}

Podmnožina P1 tedy obsahuje celkem 2N navzájem odlišných prvků. Takto specifikovanou reprezentaci čísel popsanou výše uvedeným vztahem pro podmnožinu P1 budeme v dalším textu označovat zápisem U(a,b), kde hodnota a=N-b značí počet platných bitů před řádovou binární čárkou. V reprezentaci U(a,b) dále z předchozího vztahu vyplývá vlastnost, že n-tý bit v binárním slově má svoji váhu rovnu hodnotě (vyjádřené v desítkové soustavě):

Wn=2n/2b=2n-b

Přičemž se jednotlivé bity binárního slova indexují zprava doleva (podobně jako u číslic v desítkové či jiné číselné soustavě) a první významový bit zprava má index nulový. Pokud je n=b, je váha bitu n jednotková. Binární řádová čárka je umístěna mezi bitem s jednotkovou váhou a bitem napravo od něj (ten má váhu ½). Tato binární čárka se někdy označuje termínem obsažená binární čárka (Implied Binary Point), aby se tak provedlo odlišení od plovoucí binární čárky (Floating Binary Point). Zde popisovaná reprezentace čísel U(a,b) tak může obsahovat hodnoty, jež mají a celočíselných bitů (integer bits) a b zlomkových bitů (fractional bits), přičemž je vždy dopředu známá váha wn každého bitu přímo z jeho indexu n. Hodnota N-bitového čísla x má v reprezentaci U(a,b) hodnotu vyjádřitelnou vztahem:

x=1/2bn=0N-12nxn=∑n=0N-1wnxn

kde symbol xn představuje n-tý bit čísla x a symbol wn váhu tohoto bitu.

Rozsah hodnot je tedy v dané reprezentaci U(a,b) roven:

<0, (2N-1)/2b> ~ < 0, 2a-2-b>

tj. jedná se vždy o kladné hodnoty. Příkladem budiž osmibitové číslo uložené ve formátu U(5,3), které může být zapsáno ve formě vektoru s osmi (N=a+b=5+3=8) bitovými složkami:

[ b4   b3   b2   b1   b0   .   b-1   b-2   b-3 ]

Kde indexy značí mocniny vah jednotlivých bitů, tj. bit bk má váhu 2k. Vzhledem k tomu, že ze zápisu U(8,3) přímo vyplývá, že b=3, je binární čárka umístěna napravo od bitu číslo 3 a hodnota tedy obsahuje pět celočíselných bitů a tři bity zlomkové. Dostupný rozsah hodnot je v tomto případě roven:

<0,  25-2-3> ~ <0,  32- 1/8> ~ <0,  31 7/8> 

V některých případech může být výhodné reprezentovat pouze čísla s maximální hodnotou menší než jedna. To je samozřejmě možné, stačí zvolit za hodnotu a záporné číslo. Příkladem může být reprezentace U(-2,18), při jejímž použití jsou čísla uložena v -2+18=16 bitech a rozsah reprezentovaných hodnot je roven:

<0,  2-2-1/218> ~ <0, 0,249996>

3. Celá kladná čísla

Speciálním případem kladných čísel s pevnou řádovou binární čárkou jsou čísla uložená v reprezentaci U(a,0), z čehož vyplývá, že b=0 a N=a. V této reprezentaci je N-bitové kladné celé číslo rovno číslu v pevné řádové binární čárce ve formátu U(N,0). Rozsah možných hodnot lze jednoduše vyjádřit následující nerovnicí:

0 ≤ U(N,0) ≤ 2N-1

což přesně odpovídá rozsahu celých kladných N-bitových čísel. To tedy znamená, že k celým kladným číslům můžeme přistupovat stejným způsobem, jako k číslům uloženým ve formátu pevné řádové binární čárky, v některých případech se však mohou matematické operace zjednodušit. To je ostatně důvod, proč se celá kladná čísla zpracovávají přímo v ALU.

4. Jedničkový doplněk

Při vysvětlení významu jedničkového doplňku budeme vycházet z reprezentace (formátu) U(N,0), tedy z N-bitových celých kladných čísel. Pokud je hodnota x vyjádřena v této reprezentaci, je možné definovat jedničkový doplněk (značený symbolem ~x) jako inverzi všech bitů původní hodnoty x:

~xi='xi

Inverze všech bitů odpovídá v reprezentaci U(N,0) aritmetické operaci (2N-1)-x, tedy:

x=2N-1-x

Jedničkový doplněk není sám o sobě pro zde zpracovávanou problematiku příliš užitečný, představuje však základ pro vytvoření dvojkového doplňku, který bude popsán v následující kapitole.

5. Dvojkový doplněk a čísla s pevnou řádovou binární čárkou

Dvojkový doplněk hodnoty x (označovaný zde kvůli nedostatkům HTML symbolem #x) lze získat z jejího jedničkového doplňku ~x velmi jednoduše tak, že se k tomuto doplňku přičte jednotka, tj.:

#x=~x+1=2N-x

Operaci jedničkového i dvojkového doplňku je možné provádět kromě celočíselných reprezentací i u reprezentace v pevné řádové binární čárce. Pokud je N-bitové slovo interpretováno ve vyjádření v pevné řádové čárce, může nabývat hodnot ležících v podmnožině P2 racionálních čísel:

P2=p/2b | –2N-1 ≤ p ≤ 2N-1-1

Podmnožina P2 obsahuje stále 2N prvků, stejně jako podmnožina P1 definovaná v předchozích kapitolách. Novou reprezentaci čísel budu v dalším textu označovat symbolem A(a,b), kde platí a=N-b-1.

Hodnota N-bitového čísla x je v reprezentaci A(a,b) vyjádřena výrazem:

x=1/2b(-2N-1xN-1+∑0N-22nxn)

kde symbol xn značí hodnotu n-tého bitu čísla x. Rozsah čísel reprezentovaných v A(a,b) je možné vyjádřit nerovností:

-2N-1-b ≤ x ≤ 2N-1-b-1/2b

Za zmínku stojí také skutečnost, že počet významových bitů je v reprezentaci A(a,b) o jednotku nižší, než u reprezentace U(a,b). Pro reprezentaci absolutní hodnoty čísla je použito pouze nižších N-1 bitů, nejvyšší bit je díky své funkci označován jako znaménkový bit (sign bit), což je ostatně patrné z podvýrazu -2N-1xN-1.

6. Základní vlastnosti čísel reprezentovaných v systému pevné řádové čárky

V následujících odstavcích jsou vypsány základní vlastnosti číselných hodnot, jež jsou reprezentovány v systému s pevnou řádovou binární čárkou. Pravidla jsou uvedena jak pro formát U(a,b) (tj. pouze podmnožinu z kladných racionálních čísel), tak i pro formát A(a,b), tj. pro podmnožinu z kladných i záporných racionálních čísel.

6.1 Počet bitů

Počet bitů nutných pro uložení číselné hodnoty v reprezentaci U(a,b) je roven výsledku výrazu a+b, což mimo jiné značí, že všechny bity daného bitového vektoru jsou beze zbytku použity pro uložení číselné hodnoty. V reprezentaci A(a,b) je počet bitů roven hodnotě a+b+1, protože jeden bit navíc je nutné rezervovat pro uložení znaménka ukládané číselné hodnoty – viz výše zmíněný znaménkový bit.

6.2 Rozsah hodnot

Rozsah hodnot v reprezentaci čísel ve formátu U(a,b) lze vyjádřit vztahem 0≤ x1 ≤ 2a-2-b, pro reprezentaci A(a,b) je rozsah hodnot vyjádřen nerovností: -2a≤ x2 ≤ 2a-2-b, což značí, že ve druhém uvedeném typu reprezentace je možné zaznamenat dvojnásobné množství navzájem odlišných hodnot – tato skutečnost je ostatně dána i větším počtem bitů pro reprezentaci A(a,b) oproti reprezentaci U(a,b) při stejných hodnotách parametrů ab.

6.3 Platnost aritmetické operace součtu či rozdílu

Platnost aritmetické operace součtu či rozdílu hodnot uložených ve formátu U(a,b) pro kladná čísla U(a1,b1) a U(a2,b2) lze zaručit pouze tehdy, jestliže je a1 rovno a2 a současně b1 rovno b2, tj. obě hodnoty jsou uloženy ve slově (bitovém vektoru) se stejným množstvím (počtem) bitů a poloha řádové binární čárky je konstantní. Pro číselné hodnoty uložené ve druhém popisovaném formátu A(a1,b1) a A(a2,b2) platí stejné podmínky. Pokud není alespoň jedna z podmínek splněna, je nutné před provedením aditivní operace provést konverzi hodnot na shodný formát U(ax, by) resp. A(ax, by).

6.4 Rozsah výsledků po aritmetické operaci sčítání

Rozsah výsledků po aritmetické operaci sčítání dvou číselných hodnot ve formátu U(a,b) lze vyjádřit následovně:

U(a,b)+U(a,b)­=U(a+1,b)

tj. pro uložení výsledku je obecně zapotřebí vyhradit slovo širší právě o jeden bit. Pro dvě hodnoty ve formátu A(a,b) platí stejný vztah, jelikož se počet bitů obecně také zvyšuje o jednotku bez ohledu na znaménko výsledku:

A(a,b)+A(a,b)­=A(a+1,b)

6.5 Rozsah výsledků po provedené aritmetické operaci násobení

Rozsah výsledků po provedené aritmetické operaci násobení dvou libovolných číselných hodnot uložených ve formátu U(a1,b1) a U(a2,b2) je možné vyjádřit následujícím vztahem:

U(a1, b1) × U(a2, b2)=U(a1+a2, b1+b2)

Výše uvedeným vztahem je popsáno, že se při ukládání výsledků takto provedené multiplikativní operace zvyšuje jak počet významových bitů před binární řádovou čárkou, tak i stejnou měrou počet zlomkových bitů, tj. bitů umístěných za binární čárkou. Při provádění multiplikativní operace s číselnými hodnotami uloženými ve formátu A(a1,b1) a A(a2,b2) je situace při ukládání výsledků následující:

A(a1,b1) × A(a2, b2)=A(a1+a2+1, b1+b2)

Tento vztah je poněkud odlišný od vztahu předchozího, ale při bližším rozboru je opět snadno pochopitelný. U číselných hodnot ve formátu A(a,b) je totiž jeden (nejvyšší) bit rezervován pro vyjádření znaménka uložené hodnoty. Po násobení je také nutné vyjádřit znaménko výsledku, ale opětovně pouze na jednom bitu, nikoli na bitech dvou.

6.6 Počet bitů pro uložení výsledků provedené aritmetické operace dělení

je pro oba typy popisovaných formátů číselných hodnot možné vyjádřit vztahy:

U(a1, b1)/U(a2,b2)=­U(a1+b2, | log2(2a2+b1-2b1-b2)|)

a pro druhý popisovaný formát vztahem:

A(a1, b1)/A(a2, b2)=A(a1+b2+1­, a2+b1)

Zvyšuje se tedy počet bitů za binární řádovou čárkou.

6.7 Operace bitového posunu

Poslední popisovanou operací je bitový posun doprava a doleva, který představuje speciální případ násobení či dělení čísel hodnotou 2x. Operaci bitového posunu doprava budu v dalším textu značit symbolem , bitový posun doleva potom symbolem . Při bitovém posunu doleva se formát hodnot výsledku změní následovně:

U(a,b)← n=U(a+n, b-n)
A(a,b)← n=A(a+n, b-n)

což značí, že se, zcela nezávisle na použitém formátu uložení číselných hodnot, pouze změní poloha binární řádové čárky v bitovém vektoru. U bitové operace posunu doprava je situace obdobná:

U(a,b)→ n=U(a-n, b+n)
A(a,b)→ n=A(a-n, b+n)

root_podpora

7. Obsah sedmého pokračování tohoto seriálu

V následujícím pokračování tohoto seriálu již budou uvedeny algoritmy pracující s číselnými hodnotami uloženými v systému pevné řádové binární čárky. Popíšeme si jak základní operace (sčítání, odečítání, násobení a dělení), tak i operace složitější a zejména význam tabulek s předpočítanými hodnotami.

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.