Příprava na cvčení č.1 Čísla a artmetka Číselné soustavy Obraz čísla A v soustavě o základu z: m A ( Z ) a z (1) n kde: a je symbol (číslce) z je základ m je počet řádových míst, na kterých má základ kladný exponent (celá část) n je počet řádových míst, na kterých má základ záporný exponent (zlomková část čísla). 3 2 1 0 1 2 PŘ: 2504,36 2 10 5 10 0 10 4 10 3 10 6 10 Řádová čárka = místo, které odděluje celou část čísla od zlomkové. Používané číselné soustavy: Desítková z = 10 Dvojková z = 2, jedna číslce = bt, nevýhoda dlouhý záps Hexadecmální z = 16, používá se pro zkrácení bn zápsu Převody mez soustavam BIN to DEC: Dosazením do vzorce (1) 3 0 1 2 1011(2) 1 2 1 2 1 2 0 2 11 (10) DEC to BIN: Převod čísla provedeme postupným dělením dekadckého čísla základem bnární soustavy, tj. číslem 2 a sepsováním zbytku po celočíselném dělení. Výsledek dostaneme zapsáním všech zbytků v obráceném pořadí (odspodu na zleva doprava ) 215 : 2 = 107 1 53 1 26 1 13 0 6 1 3 0 1 1 0 1 215 (10) = 11010111 (2) DEC to HEX: Převod čísla 0 až 15 (dec) zvládneme zpamět 0 až F (hex). Převod většího čísla provedeme postupným dělením dekadckého čísla základem hex.soustavy, tj. číslem 16 a sepsováním zbytku po celočíselném dělení. Výsledek dostaneme zapsáním všech zbytků v obráceném pořadí. 1
Příprava na cvčení č.1 1. krok: 2456 : 16 = 153,5 16 * 153 = 2448 2456 2448 = 8 2. krok 153 : 16 = 9,5625 16 * 9 = 144 153 144 = 9 3. krok 9 : 16 = 0,5625 16 * 0 = 0 9 0 = 9 2456 (10) = 998 (16) Nebo druhý postup: odečítání nejblžších nžších mocnn základu soustavy 2456 = X * 16 2 + X * 16 1 + X*16 0 X * 256 + X*16 + X*1 9 (Zbytek 152) 9 (Zbytek 8) 8 (Zbytek 0) 9 * 256 = 2304 9 * 16 = 144 HEX to DEC: Dosazením do vzorce (1) 3 2 1 0 1A8Fh 1 16 10 16 8 16 15 16 6799 (10) HEX to BIN: Každou číslc separátně převést na dvojkové vyjádření 85h = 1000 0101 (2) BIN to HEX: Číslo zleva doplnt nevýznamným nulam tak, aby počet míst byl děltelný 4. Každou čtveřc číslc separátně převést na hex. 0111 1110 (2) = 7Eh Základní artmetcké operace v bnární soustavě Sčítání Sčítání v bnární soustavě probíhá podle stejného algortmu, jako v soustavě desítkové na papíře. Uvažme dvě bnární čísla A a B, pro která platí a 2, B 0 0 A b 2 (2) Předpokládejme, že jejch součet je roven s 0 S 2 (3) 2
Příprava na cvčení č.1 Podobně jako př operac na papíře, je v každém řádu proveden součet s a b mod z (4) kde z je základ. Součet s se nazývá řádový součet. Je-l modul operace (4) překročen, je k vyššímu řádu přčtena jednčka. Je tedy nutné zavést ještě novou pomocnou proměnnou c, kterou nazveme přenos (carry), a která bude nabývat hodnoty 1, byl-l v daném řádu překročen modul sčítačky. Tento přenos je pak nutné přčítat k součtu ve vyšším řádu s +1. Neúplná pravdvostní tabulka jednoho součtu dvou btů a přenosu Př.: a b c s c +1 0 0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 1 1 1 1 (c je přenos z nžšího řádu, c +1 pak přenos do vyššího řádu) Sečtěte: 1010101 1001 101101 0101010 0101 011010 1111111 1110 1000111 a s přenosy z nžších a do vyšších řádů: a 1 1 0 1 0 1 0 0 b 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 0 0 c c +1 1 1 0 1 1 1 0 0 s 1 1 0 1 0 0 0 1 0 Výsledek sčítání dvou n-btových čísel může mít až (n+1) btů, neboť je-l c z nejvyššího řádu (n-1) rove, stává se po přčtení v řádu n součástí výsledku (pro = 0 až n-1). Odčítání Pro odčítání lze odvodt analogcké vztahy jako pro sčítání. Uvažme dvě bnární čísla A a B, pro která platí a 2, B 0 0 A b 2 (5) Předpokládejme, že jejch rozdíl je roven 3
Příprava na cvčení č.1 r 0 R 2 (6) Rozdíl r se nazývá řádový rozdíl. Podobně jako u sčítání, zde je probíhá operace r a b mod z (7) a je nutné zavést další pomocnou proměnnou v, kterou nazveme výpůjčka pro řád -1 z řádu. Pravdvostní tabulka jednoho řádového rozdílu a b v r v +1 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 (v +1 je výpůjčka pro řád z řádu +1) Př.: a 1 0 0 1 0 1 1 0 b 1 0 1 0 0 1 0 1 1 1 1 0 0 0 0 1 0 v v +1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 r Postup odečítání Postup: 0-1 = -1 tedy 1 když s představíme vypůjčenou 1ku z vyššího řádu. Tu ale nesmíme zapomenout ve vyšším řádu zase případně odečíst... 10110101 10000 1 1011 1011101 101-10 -0110 1011000 1011 zkuste s na kalk. 101 Násobení Násobení v bnární soustavě probíhá podle stejného algortmu, jako v soustavě desítkové. Máme-l vynásobt dvě čísla A a B, je nutné nejprve artmetcky vynásobt každý bt čísla B celým číslem A, a jednotlvé mezvýsledky pak sečíst. A 1100 B *0101 1100 0000 1100 0000 00111100 (nula na pozc MSB výsledku vyjadřuje případné přetečení výsledku sčítání, ke kterému může dojít) 4
Příprava na cvčení č.1 Z obr. je zřejmé, že výsledek po násobení n-btových čísel bude mít nejvýše 2*n btů. Protože u bnární soustavy je výsledek artmetckého násobení shodný s výsledkem operace logckého součnu, může být příslušný mezvýsledek roven 0, je-l b = 0, nebo číslu A, je-l b = 1. Celý algortmus lze pak s výhodou realzovat jako postupné sčítání (n-1)-krát doleva rotovaného čísla A nebo 0 (podle hodnoty btu b ) přes celou šířku čísla výsledku. Reprezentace čísel se znaménkem Zobrazení záporných čísel Jedním z problémů př ukládání bnárních čísel v počítač je způsob záznamu záporných čísel, neboť pro číslo je k dspozc jen omezený počet btů. Přímý kód První možný způsob je vyčlenění prvního btu jako znaménka. Pokud například bnární číslo 00000001 vyjadřuje jednčku, pak 10000001 označuje -1. Tento způsob ale komplkuje algortmy pro praktcké počítání nejprve je vždy třeba testovat znaménkový bt a podle výsledku provést sčítání nebo odčítání. Navíc je třeba mít pro sčítání a odčítání různé algortmy. Další nevýhodou je, že exstují dvě reprezentace čísla nula kladná nula a záporná nula. Proto byl pozděj objeven doplňkový kód pro záznam záporných čísel. Doplňkový kód Podrobnější nformace naleznete v článku Dvojkový doplněk. Př kódování v doplňkovém kódu je záporné číslo zaznamenáno jako bnární negace (záměna všech 0 za 1) původního čísla zvětšená o 1. Úvodní bt má v tomto kódu opět význam znaménka. Využívá se faktu, že př odečtení čísla 00000001 od čísla 00000000 dojde k přetečení, a výsledkem je číslo 11111111. V tomto kódu už exstuje jen jedná reprezentace čísla nula, an není zapotřebí specální algortmus pro odečítání. Příklad: pokud 00001101 je bnární vyjádření čísla 13, pak -13 se vypočte jako 11110010 + 1 = 11110011 Pokud se sečte takto vyjádřené záporné číslo s jným záporným nebo větším kladným číslem, dojde k přetečení rozsahu. Kód je ale zvolen tak, že po odříznutí přetečeného btu dostáváme správný výsledek. Příklad: 20-13 = 20 + (-13) = 00010100 + 11110011 = 1 00000111 = 7 (po odříznutí přeteklého devátého btu) Poznámka: všechny příklady jsou pro jednoduchost provedeny na číslech o rozsahu 8 btů (1 byte). 5
Příprava na cvčení č.1 Přímý kód grafcky Pro zobrazení záporných čísel můžeme použít stejný prncp, který se pro záps záporných čísle běžně používá. Jeden bt (obvykle ten nejvyšší) využjeme pro uložení znaménka. Obvyklá reprezentace je 0 kladné znaménko 1 záporné znaménko Mají-l záporná čísla v nejvyšším řádu 1, pak se vlastně přesouvají do druhé polovny rozsahu zobraztelných čísel. Uvažujme číslo Z, pro které platí: Z = 2 n, kde n je počet btů (šířka slova procesoru) P(A) Z 1/2Z -1/2Z 0 1/2Z A Matematcky lze vyjádřt obraz čísla A v přímém kódu P(A) vztahem: P(A) = A = A pro A >= 0 P(A) = ½*Z + A pro A <= 0 Nula má dva obrazy: 0 a ½*Z. Pro 8 btů pak budou základní čísla (Z = 256): A P(A) P(A) bn pozn. -127 255 1111 1111 mn. záporné číslo -126 254 1111 1110-1 129 1000 0001 0 0 (128) 0000 0000 (1000 0000) kladná (záporná) nula 1 1 0000 0001 127 127 0111 1111 max. kladné číslo 6
Příprava na cvčení č.1 Doplňkový kód grafcky D(A) Z 1/2Z -1/2Z 0 1/2Z A Matematcky lze vyjádřt obraz čísla A v doplňkovém kódu D(A) vztahem: D(A) = A pro A >= 0 D(A) = Z + A pro A < 0 Převod v up negace čísla a přčtení jednčky Pro 8 btů pak budou čísla (Z = 256): A D(A) D(A) bn pozn. -128 128 1000 0000 mn. záporné číslo -127 129 1000 0001-1 255 1111 1111 0 0 0000 0000 nula 1 1 0000 0001 127 127 0111 1111 max. kladné číslo Další nformace k dvojkovému doplňku a převodu desetnných čísel najdete v: Procvčování: Převeďte čísla z bnární do desítkové soustavy: 1111 (2) = 101010 (2) = Převeďte čísla z desítkové do bnární soustavy: 1127 (10) = 255 (10) = 1024 (10) = 7
Příprava na cvčení č.1 Převeďte čísla z desítkové do hex. soustavy: 255 (10) = 320 (10) = Převeďte čísla z hex. do desítkové soustavy: ABCD (16) = 100 (16) = Převeďte čísla z hex. do bn. soustavy: 25F (16) = 32 (16) = Převeďte čísla z bn. do hex. soustavy: 1010 0111 (2) = 1110 0001 (2) = Převeďte čísla z dvanáctkové do dec. soustavy: 300 (12) = 158 (12) = Sečtěte dvě čísla v bnární soustavě: 10101010 10101010 11101110 10000010 Odečtěte dvě čísla v bnární soustavě: 10111010 10001011 8
Příprava na cvčení č.1 Vynásobte dvě čísla v bnární soustavě: 1110 1010 Jaký je dvojkový doplněk k číslu: 1101 1011 0101 1010 9