Polyadické číselné soustavy - převody M-místná skupina prvků se z-stavovou abecedou umožňuje zobrazit z m čísel. Zjistíme, že stačí vhodně zvolit číslo m, abychom mohli zobrazit libovolné číslo menší než z m. Vypíšeme-li si kódové složky např. pro z=2 a m=3 s očíslovanými pozicemi: 210 000 001 010 111 Zjistíme, že čísla lze jednoduše přiřadit ohodnoceným kombinacím takto: Číslo F v soustavě o základu z: Fz =a z + a z +...+a z +a z = m-1 m-2 1 0 m-1 m-2 1 0 kde a i jsou číselné koeficienty řádových míst a mohou nabývat hodnot od 0 do z-1 m počet řádových míst (= počet obecně m-stavových buněk) v číselné soustavě m 1 i i az (1.1) i 0 Uvedený výraz platí pro celá čísla. Nic nám nebrání tomu, abychom postup zobecnili i pro místa za myšlenou řádovou čárkou: m-1 m-2 1 0-1 -2 -n Fz =a m-1z + am-2z +...+a1z +a0z +a-1z +a-2z +...+a -nz = m 1 i i az (1.2) i n kde n počet míst za řádovou čárkou Prakticky, pokud je základ číselné soustavy všeobecně znám, zapisujeme číslo v takovéto číselné soustavě jen pomocí koeficientů příslušných řádových míst: a a...a a,a a...a (1.3) m-1 m-2 1 0-1 -2 -n Pokud se v číselné soustavě dá číslo vyjádřit vztahem (1.1) nebo (1.2), nazýváme takovou soustavu polyadickou číselnou soustavou podle základu z nazýváme číselnou soustavu dvojkovou, osmičkovou, desítkovou, případně šestnáctkovou a další. Pokud je základ číselné soustavy větší než 10, je pro prvky abecedy takové soustavy nutné použít další symboly, což jsou v případě šestnáctkové soustavy písmena a až f, buď malé, nebo velké abecedy. Pokud v zápisu podle (1.3) není všeobecně znám základ číselné soustavy, značí se zápisem základu z ve formě indexu za výraz, nebo ( v programech pro mikroprocesory v assembleru) písmenem na konci, případně předponou, příklady: 14, 14 10, 14D, 0EH, $E, 0xE, 1110B
Přepočty čísel mezi číselnými soustavami o různých základech Máme-li dvě číselné soustavy jednu o základu z 1 a druhou o základu z 2, a má-li být možné převádět čísla z první do druhé, je zřejmé, že kapacita druhé soustavy musí být stejná nebo větší než kapacita soustavy první, aby bylo možné všechna čísla přepočítat (= zobrazit v druhé číselné soustavě). Musí tedy platit, že m1 m2 z <= z (1.4) 1 2 a tedy pro počet řádových míst platí m log z 1 2 m1 (1.5) log z2 Příklad: pro přepočet z desítkové do dvojkové soustavy platí, že a) přepočet do desítkové soustavy log10 m2 m10 3.32m10 (1.6) log 2 vychází se z definiční rovnice (1.1) nebo (1.2): dosadíme příslušné mocniny základu odpovídající nenulovým koeficientům a i a sečteme. Příklad: 101101B do desítkové soustavy: F 10 =1 10 +4 10 +8 10 +32 10 =45 10 Nebo prakticky: do prázdného registru přičteme koeficient od nejvyššího a vynásobíme základem, u posledníhojen přičteme koeficient. To platí pro celá čísla, pro místa za řádovou čárkou od konce a dělíme, pro celou a zlomkovou část zvlášť. Mocniny dvou: 2 1 =2 2 2 =4 2 3 =8 2 4 =16 2 5 =32 2 6 =64 2 7 =128 2 8 =256 2 9 =512 2 10 =1024 2 11 =2048 2 12 =4096 2 13 =8192 2 14 =16384 2 15 =32768 2 16 =65536 A dále: 2 8 = (16) 2 = 256 2 10 = 1K = 1 024 2 12 = 1K 2 2 = 4 096 2 16 = 1K 2 6 = 65 536 2 20 = (1K) 2 = 1M = 1 048 576
b) přepočet z desítkové do jiné soustavy Ze vztahu (5.2) pro jednotlivé koeficienty soustavy o základu z vychází, Nejprve a 0 : F a z a z... a z a a m 1 m 2 1 10 m 1 m 2 1 0 0 F10 1 Podobně a 1 : F a z a z... a z a a m 1 m 2 1 10 1 m 1 m 2 2 1 1 F10 2 Takto získáme jednotlivé koeficienty vždy jako zbytek po dělení čísla v desítkové soustavě novým základem číselné soustavy. Jako první dostáváme koeficient nejnižšího řádu. Příklad: číslo 35D do dvojkové soustavy: 35:2=17, zb. 1 17:2=8, zb. 1 8:2=4, zb. 0 4:2=2, zb. 0 2:2=1, zb. 0 1:2=0, zb. 1 Číslo ve dvojkové soustavě je 100011B. Prakticky tento algoritmus s pomocí kapesní kalkulačky: zadáme převáděné číslo a znamenáme si, je-li sudé před desetinnou čárkou, tak 0, je-li liché, pak 1. Zadáme dělení 2. Pak postupně tiskneme tlačítko rovná se a hodnotíme, zda je liché nebo sudé a podle toho píšeme 1 nebo 0, píšeme samozřejmě odprava doleva. Triviální postup je samozřejmě postupné dělení převáděného čísla mocninami nového základu a to v pořadí od nejvyšší mocniny, vyjde-li podíl nenulový, pak pokračujeme podobně se zbytkem po dělení. c) převod z binární do šestnáctkové soustavy Podobně jako v případě b) ze vztahu (5.2) pro jednotlivé koeficienty soustavy o základu tentokrát z=16 vychází, Nejprve a 16-0 : F2 a z a z... a z a z a z a z a a z a z a z a m 1 m 2 4 3 2 1 3 2 1 m 1 m 2 4 3 2 1 0 3 2 1 0 F16 1 Podobně a 16-1 : F a z a z... a z a a m 1 m 2 4 16 1 m 1 m 2 8 16 1 16 1 F16 2 Protože 16=2 4, získáme jednotlivé koeficienty vždy jako zbytek po dělení čísla v binární soustavě novým základem a dělení v tomto případě je posuv doprava o 4 bity. Stejně jako v případě b) jako první dostáváme koeficient nejnižšího řádu. Čtyřbitovou kombinaci pak musíme převést na šestnáckové číslo. Prakticky tedy stačí rozdělit binární číslo na čtyřbitové skupiny. Další číselné formáty
Pro aplikace a výpočty, kde je třeba větší dynamický rozsah, se používá i formát s pohyblivou řádovou čárkou. Formát čísel je jistým způsobem normalizován, a to zejména z důvodů implementace ve vyšších programovacích jazycích, kde se výpočty s čísly ve formátu s pohyblivou řádovou čárkou programují. Pro formáty s pohyblivou řádovou čárkou existuje norma IEEE 754-2008. Jak vypadají 32-bitové formáty čísel v procesoru Intel Core 2 Duo je vidět z následující tabulky, obrázek je převzatý z firemní dokumentace: (NaN znamená Not a Number, což je zobrazení položky, která nereprezentuje platné číslo) Obr. 1 formát čísla dle IEEE 754-2008 Jak vypadá v tomto 32-bitovém formátu konkrétní číslo, v tomto případě 178,125 je patrné z následující tabulky (poslední řádek): Obr. 2 číslo 178,125 ve formátu dle IEEE 754-2008 Od leva: jeden bit znaménko, pak osm bitů exponent s posuvem (offset 01111111b = 127) a zbytek je mantisa s tím, že se předpokládá implicitní jednička na začátku a před desetinnou čárkou, mantisa má pak rozsah od 1 do (skoro) 2. Binárně pak číslo vypadá v paměti počítače takto: 01000011001100100010000000000000 b, tedy 32 bitů, nebo hexadecimálně 43322000 h. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3 3 2 2 0 0 0
binární šestnáctková desítková BCD binary coded decimal 1 10 100 1000 1100 1110 1111 1010 10000001 10101010 11110000 1111 0000 0000 10100101 10 1f 80 100 200 400 1000 2000 4000 8000 f000 ffff f0 1 2 5 10 100 128 1000 1,125 5,5 10,0625
0,25 0.26 100.001 99,99 101 +111 10000001 +10000011 15 +15 1f +1f 00010110 +00010110 Převeďte číslo 1001,1001 do tvaru ve formátu dle IEEE 754-2008
celá část: 1001/2 500 1 250 0 125 0 62 1 31 0 15 1 7 1 3 1 1 1 0 1 desetinná část: 0,1001 * 2 0,2002 0,4004 0,8008 1,6016 1,2032 0,4064 0,8128 1,6256 1,2512 0,5024 1,0048 0,0096 0,0192 0,0384 0,0768 0,1536 0,3072 0,6144 1,2288 0,4576 0,9152 1,8304 1,6608 vědecká notace dekadicky: 1,0011001 e3 vědecká notace binárně (implicitní jednička): 1111101001,00011001101000000010011 = 1,11110100100011001101000000010011 e 00001001 01111111 totéž s posunutím exponentu o 127: 10001000 výsledek: 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 0 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 4 4 7 A 4 6 6 8