P2 – Číselné soustavy, jejich převody a operace v čís. soustavách 1. Zobrazení čísla v libovolné číselné soustavě Lidé využívají ve svém životě pro zápis čísel desítkovou soustavu. V této soustavě máme pro zápis čísel k dispozici deset cifer (0...9). Tzv. základ soustavy je v tomto případě roven 10. Existují však i číselné soustavy o jiném základu než 10. V číslicové technice se pro zobrazení dat využívá výhradně dvojková soustava, tj. všechna data (resp. datové signály) a řídící signály jsou zobrazeny pomocí kombinace číslic 0 a 1. Je všeobecně známo, že např. číslo 325,23 v desítkové soustavě je možné rozepsat dle jednotlivých řádů pomocí mocnin deseti, tj. pomocí mocnin základu soustavy, takto:
325,23 = 3 ⋅ 100 + 2 ⋅ 10 + 5 ⋅ 1 + 2 ⋅ 0,1 + 3 ⋅ 0,01 = = 3 ⋅ 102 + 2 ⋅ 101 + 5 ⋅ 100 + 2 ⋅ 10-1 + 3 ⋅ 10-2
V obecném případě hovoříme o soustavě se základem z, neboli o z-adické soustavě. Polynomiální zápis čísla v z-adické soustavě vypadá formálně takto: n -1
(N)z = ∑ a j . z j j = -m
Tedy a n a n -1 L a 0 , a -1 L a - m =
= an ⋅ z n + an-1 ⋅ z n-1 + L + a0 ⋅ z 0 + a-1z -1 + L + a-m ⋅ z -m ,
kde z je základ soustavy (z ≥ 2) a ai je z-adická cifra (též číslice), ai ∈ { 0,1, K, z − 1 } . Počet z-adických cifer je vždy roven číslu z. Čárka v zápisu čísla se nazývá řádová čárka, část čísla nalevo od čárky je celá část čísla, část zapsaná napravo od čárky je zlomková část čísla(desetinná část).
Desítková soustava Pro desítkovou (dekadickou) soustavu je základ soustavy z = 10 a desítkové cifry jsou .
ai = {0,1,2,3,4 ,5,6 ,7 ,8,9}
Dvojková soustava Pro dvojkovou (binární) soustavu je základ soustavy z = 2 a dvojkové cifry jsou pouze dvě: ai = {0,1} .Číslo 11012, zapsané ve dvojkové soustavě , vyjadřuje tuto desítkovou hodnotu: 11012 = 1⋅ 23 + 1⋅ 22 + 0 ⋅ 21 + 1⋅ 20 = 1310 Dvojková číslice je nazývána také pojmem bit (z anglického binary digit). V počítačích vyjadřujeme čísla vždy na konečný počet bitů. Bit s nejnižší váhou (zde a ) se 0 nazývá také nejméně významný ( zkr. LSB - least significant bit), bit s nejvyšší váhou (zde a ) je nejvíce významný (zkr. n MSB - most significant bit). Protože je zápis čísel ve dvojkové soustavě zbytečně dlouhý ( 17210 = 101011002 ), používá se v odborných textech soustava osmičková a nejčastěji šestnáctková. Důvod pro výběr těchto dvou je jejich příbuznost se soustavou dvojkovou .
Osmičková soustava Protože je zápis čísel ve dvojkové soustavě zbytečně dlouhý, používá se v odborných textech soustava osmičková a nejčastěji šestnáctková. Důvod pro výběr těchto dvou je jejich příbuznost se soustavou dvojkovou. V osmičkové (oktalové) soustavě je základ roven z = 8 a osmičkové cifry jsou ai = {0,1,2,K ,7} . Číslo zapsané v osmičkové soustavě vyjadřuje hodnotu:
(173)8 = 1⋅ 82 + 7 ⋅ 81 + 3 ⋅ 80 = 1⋅ 64 + 7 ⋅ 8 + 3 ⋅1 = (123)10
Šestnáctková soustava V šestnáctkové (hexadecimální) soustavě je základ roven z = 16. V této soustavě existuje šestnáct cifer. Protože je arabských číslic pouze 10, nahrazujeme šestnáctkové cifry vyjadřující hodnoty 10 … 15 písmeny abecedy A … F: (A = 10, B = 11, K , F = 15 )
Tudíž číslo 3A8 zapsané v šestnáctkové soustavě vyjadřuje hodnotu
(3A8)16 = 3 ⋅ 162 + 10 ⋅ 161 + 8 ⋅ 160 = 3 ⋅ 256 + 10 ⋅ 16 + 8 ⋅ 1 = (936)10
2. Převody mezi číselnými soustavami Nejčastěji se při práci s různými číselnými soustavami setkáváme s požadavkem převést číslo zapsané v „jiné“ soustavě do desítkové a naopak. Pod pojmem „jiná“ soustava budeme rozumět soustavu o základu z, kde z ≠ 10.
2.1 Převod z desítkové soustavy do dvojkové převod celé části čísla Aplikujeme-li polynomiální zápis čísla na dvojkovou soustavu (z = 2), dostaneme a n a n - 1 K a0 = a n ⋅ 2 n + a n - 1 ⋅ 2 n - 1 + K + a 0 ⋅ 2 0
a) Intuitivní postup Uvědomíme-li si, že a i ∈ {0,1} , pak příspěvky v součtu jsou pouze mocniny čísla 2. Převod čísla z desítkové soustavy do dvojkové můžeme provést tak, že nejprve číslo rozepíšeme jako součet mocnin 2. Ve dvojkové soustavě pak zapíšeme jedničky do těch řádů, jejichž mocniny jsou v součtu zastoupeny.
Postup ukážeme na příkladě:
(75)10 = 64 + 8 + 2 + 1 = 26 + 2 3 + 21 + 20 = = 1 ⋅ 26 + 0 ⋅ 25 + 0 ⋅ 24 + 1 ⋅ 2 3 + 0 ⋅ 2 2 + 1 ⋅ 21 + 1 ⋅ 20 = (1001011)2
b) Celočíselným dělením celé části čísla základem z Tato metoda používá při převodu celočíselného dělení (operace ÷) a zbytku po celočíselném dělení. Postup opět ukážeme na stejném příkladu, bez matematického odvození metody. Zájemce odkazuji na literaturu [1]. Použijeme číslo N = (75,75)10 a nyní dělíme celou část čísla základem, tedy 75 dělíme základem 2 :
n-1 0 1 .2 .2 a a 75 .2 a = 37 + 1 = n-1 + ... + 1 + 0 2 2 2 2 2
Porovnáme-li obě strany rovnice, můžeme tedy zapsat, když porovnáme nejdříve zbytkovou a0 1 = 2 2
a tedy
a0 = 1
Pokračujeme s dělením té druhé časti rovnice, tedy
an-1.2 n-2 a1.20 37 1 = 18 + = + ... + 2 2 2 2
Porovnáním obou stran rovnice opět dostaneme
1 a1 = tedy 2 2
a1 = 1
atd.
Výsledek převodu čísla 7510 zapíšeme do tabulky: a0 - 75 : 2 = 37 + ½ → a0 = 1 a1 - 37 : 2 = 18 + ½ → a1 = 1 a2 - 18 : 2 =
9 + 0 → a2 = 0
a3 - 9 : 2 = 4 + ½ → a1 = 1 a4 - 4 : 2 = 2 + 0 → a4 = 0 a5 - 2 : 2 = 1 + 0 →
a5 = 0
a6 - 1 : 2 = 0 + ½ → a6 = 1
Tedy 7510 = 10010112
2.2 Převod desetinné části (zlomkové) Vezměme následující číslo (N)10 = (75,75)10 - nyní provedeme násobení základem z =2 . Tedy (0,75)10 . 2 = 1,50 = 1 + 0,5 = a-1 .2-1.2 + a-2 .2-2 .2 + ... + a-m .2-m .2 = a-1 .20 + a-2 .2-1 + ... + a -m .2-m +1 Porovnáme opět obě strany rovnice a můžeme zapsat, Pokračujeme dále s násobením základem z = 2, tedy
a-1 = 1
0,5.2 = 1.0 + 0 = a-2 .2-1.2 + a-3 .2-2 .2 + ... + a - m .2-m +1.2 = a-2 .20 + a-3 .2-1 + ... + a - m .2 - m + 2
Opět po porovnání obou stran rovnice můžeme stanovit: a-2 = 1 a protože zbytek je již nulový, jsou i další číslice 0 → a-3 = 0 Celkový výsledek převodu tedy je :
(75,75)10 = (1001011,110)2
2.3 Převod do osmičkové soustavy Jak již bylo řečeno v osmičkové (oktalové) soustavě je základ a i = {0,1,2,K , 7} roven z = 8 a osmičkové cifry jsou . Vezměme opět desítkové číslo (75,75)10 a převeďme jej do osmičkové soustavy: a) Celá část čísla - budeme dělit základem z = 8
a0 3 an -1 .8 n-1 a1 .81 + ... + + 75 : 8 = 9 + = 8 8 8 8
Porovnáním stanovíme
a0 = 3.
Dále opět budeme dělit zbytek základem z = 8 , tedy
an-1 .8 n-2 a2 .81 a1 .80 1 + ... + + 9 : 8= 1 + = 8 8 8 8 Porovnáním dostaneme : a1 = 1 , tedy 8 8
a1 = 1
Dále zůstal již zbytek 1, který je menší než 8 a tedy a2 = 1. Výsledek tedy je : (75)10 = (113)8
b)
Desetinná část čísla - nyní budeme násobit základem z = 8 (0,75)10 . 8 = 6 + 0 = a-1 .8−1.8 + ... + a-m .8-m .8
Po porovnání je 6 = a-1 .8 0
tedy
a-1 = 6
A protože zbytek je roven 0, je i další část převodu nulová! Výsledně tedy převod čísla (75,75)10 = (113,6)8 .
2.4 Převod do šestnáctkové soustavy Budeme postupovat obdobně jako u předchozích soustav a) Převod celé část čísla :
a1 .161 a 0 .160 11 a n-1 .16n-1 75 = 4 + = + ... + + 16 16 16 16 16 Pak bude a 0 = 11 = B
a
a1 = 4
tedy (75)10 = (4B)16
b) Převod desetinné části čísla :
(0,75)10 . 16 = 12 + 0 = a-1 .16-1.16 + ... + a-m .16-m .16 (75)10 = (0, C)16 Tedy Výsledně je převod do šestnáctkové soustavy zadaného čísla: (75,75)10 = (4B, C)16
2.5 Převod mezi soustavou dvojkovou a osmičkovou resp. šestnáctkovou Zjednodušený postup : Je dané dvojkové číslo a uděláme převod do osmičkové soustavy: Dvojkové číslo rozepíšeme do skupin po 3 bitech (binárních číslicích), kde každá skupina bude odpovídat osmičkovému číslu :
(540,5)10 = (001 ↓ 000 ↓ 011 ↓ 100, 100) 2 = (1034,4)8 ↓ 1
↓ 0
↓ 3
↓ ↓ 4 , 4
= osmičková soustava
Stejným způsobem můžeme udělat převod z dvojkové soustavy do šestnáctkové soustavy s tím rozdílem, že vytvoříme skupiny po 4 bitech, neboť šestnáctková číslice se zapisuje na 4 bitech (540,5)10 = (0010 ↓ 00 01 ↓ 1 100, 1000) 2 = (21C,8)16 ↓ 2
↓ 1
↓ C ,
↓ 8
= šestnáctková soustava
2.6 Zápis čísla do Hornerova schématu Úprava polynomiálního zápisu čísla (viz rovnice 2.1) v libovolné číselné soustavě z : Celá část čísla - vytýká se základ z
( .... ( a n-1 . z + a n- 2 ). z + ... + a 2 ). z
+ a1 ). z + a0 + ....
1 Desetinná část čísla - vytýká se z a- m 1 1 1 + ((( , , , ( + a-m +1 ). + ... + a-2 ). + a-1 ). z z z z Př.: N = (19,75)10 = (10011,110) 2 =
1 1 + 1) = 2 2 3 1 1 = 1.2 4 + 1.2 + 1, + + = 16 + 2 + 1, + = 19,75 4 4 2 = (((1.2 + 0).2 + 0).2 + 1).2 + 1 + ((0 + 1).
2.6 Aritmetické operace v různých číselných soustavách – ukázka 2.6.1 Dvojková soustava a) Sčítání : (540,6)10 ………………. + (150,1)10 ………………. (690,7)10 ……………….
(1000011100, 10011)2 (0010010110, 00011)2 resp.: (1010110010, 10110)2 (,00011) ↓
29 + 27 + 25 + 24 + 21 , 2-1 + 2-3 + 2-4 512 + 128 + 32 + 16 + 2 , ½ + 1/8 + 1/16 Otázka přesnosti : Mělo by být :
690, 687510 690,7
b) Odčítání : x - y - bi = D – Bo od x se odečte y a bi(borrow input) bi - borrow input - výpůjčka z nižšího řádu D - diference - rozdíl Bo - borrow output – výpůjčka do vyššího řádu Jednobitová odčítačka : x y bi D Bo Poz. 0 1 0 1
0 0 1 1
0 0 0 0
0 1 1 0
0 0 1 0
-1
0
0
1
1
1
-1
1
0
1
0
0
0
1
1
0
1
-10
1
1
1
1
1
-1
Poznámka: odčítání se v klasické podobě v PC neprovádí Provádí se sčítání zobrazených čísel např. v doplňkovém kódu (nebo v inverzním kódu)
c) Násobení 25,510 × 1310 = 331,510
11001,1 × 1101 110011 000000 110011 110011 101001011,1 → 28 + 26 + 23 + 21 + 20 , + 2-1 = = 256 + 64 + 8 + 2 + 1 + 0,5 = = 331,510
Násobení v PC se převádí na sčítání a posuvy!!
d) Dělení - s návratem přes nulu - bez návratu přes nulu 12510 : 510 = 2510 11111012 : 1012 = 110012 = 24 + 23 + 20 = 2510 - 101 0101 - 101 000101 - 101 000000 V PC se převádí operace dělení na odčítání a posuvy!! Posuv desetinný čárky ve dvojkové soustavě o jedno místo doleva znamená jako dělení dvěmi!
2.6.2 Osmičková soustava a) Sčítání : (540,6)10 = (001│000│011│100 , 100│110)2 = (1034, 46)8 (150,1)10 = ( 010│010│110 , 000│110)2 = (0226, 06)8 -------------------------------------------------------------(001│010│110│010 , 101│100)2 = (1262, 54)8 b) Násobení : (31, 4)8 × (15)8 = (011│001, 100)2 × (001│101)2 31 4 17 7 4 (51 3,4)8 = (101 001 011, 1)2 = (331,5)10 Obdobně bychom mohli řešit dělení v osmičkové soustavě, jakož i všechny probírané operace v šestnáctkové číselné soustavě.