Principy počítačů Prof. RNDr. Peter Mikulecký, PhD.
Číselné soustavy Obsah přednášky: Přednáška 3 Číselné soustavy a převody mezi nimi Kódy, přímý, inverzní a doplňkový kód Znakové sady
Úvod Člověk se obvykle naučí o abecedu (26 znaků anglická, 42 česká) o číselnou soustavu (10 cifer) Přitom ale používáme o 10 soustavu o 60 soustavu (minuty, stupně) o 12 soustavu (hodiny, měsíce) o 7 soustavu (dny týdnu) Elektrické napětí - jen dvě úrovně (zapnuto/vypnuto) 3
Nepoziční soustavy K zápisu čísel používají číslice, jejichž váha nezávisí na pozici číslice v zápisu čísla. Přiřadíme-li číslici I hodnotu 1, pak II = 2, III = 3, IIII = 4, atd. Starověké národy (Starý Řím) zavedly i další číslice, jako je V = 5, X = 10, L = 50, C = 100, atd. římská číselná soustava. Staří Římané však částečně ustoupili od nepozičnosti, neboť např. v čísle IV má I váhu -1, zatímco v čísle VI má váhu +1. Čísla v nepozičních soustavách jsou nepřehledná a obtížná i pro elementární aritmetické operace. Díky nepozičnosti jejich číselné soustavy staří Římané k rozvoji matematiky v podstatě ničím nepřispěli. 4
Poziční (polyadické) soustavy V poziční, resp. polyadické soustavě má každá číslice v čísle pevně přiřazenu váhu závislou na pozici v čísle. Hodnota čísla N je pak v rozvinutém tvaru vyjádřena mnohočlenem (polynomem): N = a n.z n + a n-1.z n-1 + + a 2.Z 2 + a 1.Z 1 + a 0.Z 0 kde Z je základem polyadické soustavy koeficient a i je číslice v i-tém řádu. Číslice a i může nabývat hodnoty 0, 1,, (Z 1). Hodnota Z i představuje váhu číslice a i, můžeme tedy psát číslo N i ve tvaru uspořádané množiny číslic (a n, a n-1,, a i, a 0, a -1,, a -m ) 5
Dekadická soustava Dekadická (neboli desítková) soustava o Z = 10, a i = (0, 1,, 9) o Rozlišujeme tedy 10 číslic (0,1,2,3,4,5,6,7,8,9) o váha číslice je dána pozicí (umístěním) v čísle o např. 1869 1.10 3 + 8.10 2 + 6.10 1 + 9.10 0 6
Jiné používané soustavy Některé příklady: o o o Úhlová míra je založena na Z = 60, od úhlových vteřin, přes minuty a stupně až k plnému úhlu 360 = 6 x 60 Šedesátková soustava se používala i pro peníze (kopa grošů) a dodnes se tu a tam používá (např. pro počítání vajec). Staří Mayové do počítání zapojili i prsty na nohou, a tak měli dvacítkovou soustavu. V té donedávna počítali i Britové, neboť libra měla 20 šilinků. Používají se i polyadické soustavy s několika základy např. čas: o o o o o o o Z = 10 doby pod 1 sekundu (milisekundy, nanosekundy) Z = 60 od 1 sekundy do 1 hodiny Z = 12 den má 12, resp. 2 x 12 hodin Z = 7 týden má 7 dní Z = 12 rok má 12 měsíců Z = 365 / 366 počty dnů v roce Z = 10 doby v rocích (dekády) 7
Binární soustava Binární (neboli dvojková) číselná soustava Pro zpracování na počítačích se používají čísla se základem Z = 2 neboli binární čísla Rozlišují se jen dva stavy, zapisují se číslicemi 0 a 1, zápis binárních hodnot Př. (1011010) 2 = (90) 10 o 1.2 6 + 0.2 5 + 1.2 4 + 1.2 3 + 0.2 2 + 1.2 1 + 0.2 0 = 90 jednotky informace : 1 bit 1b jednotka informace 1 0 1 0 4 b = tetráda 0 1 1 1 0 1 0 1 8 b = 1 Byte 1B 8
Osmičková soustava Osmičková (neboli oktalová) soustava 3 binární bity = 1 oktalová číslice Číslice 0,1,2,3,4,5,6,7 tedy osm číslic (2 3 = 8) př. (100 110 101 010 111) 2 = (46527) 8 0 0 0 0 0 0 1 1 0 1 0 2 0 100 110 101 010 111 0 1 1 3 - ----- ----- ----- ----- ----- 1 0 0 4 0 4 6 5 2 7 1 0 1 5 1 1 0 6 1 1 1 7 Oktalová soustava však neumožňuje jednoduše sestavit zápis slova ze zápisu bytů (bajtů) 9
Šestnáctková soustava Šestnáctková (hexadecimální) soustava 4 bity = 1 hexadecimální číslice 16 číslic (2 4 = 16) Hexadecimální číslice pomocí binárních: 0 0 0 0 0 1 0 0 0 8 0 0 0 1 1 1 0 0 1 9 0 0 1 0 2 1 0 1 0 A 0 0 1 1 3 1 0 1 1 B 0 1 0 0 4 1 1 0 0 C 0 1 0 1 5 1 1 0 1 D 0 1 1 0 6 1 1 1 0 E 0 1 1 1 7 1 1 1 1 F 100 1101 0101 0111 = 4D57 10
Převody čísel binární dekadická je třeba znát mocniny 2: 2 0 = 1 2 4 = 16 2 1 = 2 2 5 = 32 2 2 = 4 2 6 = 64 2 3 = 8 2 7 = 128 0101 1010 1.2 1 = 2 1.2 3 = 8 1.2 4 = 16 1.2 6 = 64 90 2 8 = 256 2 9 = 512 2 10 = 1024 2 11 = 2048 2 12 = 4096 Atd. 11
Převody: Binární na dekadickou Každá binární číslice má v binárním čísle váhu dle toho, na kterém místě se nachází. V binárním čísle111, číslice umístěná nejvíce vpravo reprezentuje jedničky a má hodnotu 1. Technicky se jedná o místo 2 0. 12
Binární na dekadickou Druhá číslice zprava, 111, je na místě dvojek, což je zároveň i základem této číselné soustavy a její váha je 2. Technicky to znamená umístění 2 1. V dekadické soustavě by to bylo místo desítek a mělo by váhu 10. 13
Binární na dekadickou Třetí číslice zprava, 111, se nachází na místě čtyřek a má váhu 4. Technicky to znamená umístění 2 2. V dekadické soustavě by to odpovídalo místu stovek a mělo by váhu 100. 14
Binární na dekadickou Výslední dekadická hodnota binárního čísla 111 je tedy 4+2+1, což je sedm. Pokud bychom uvažovali dekadické číslo, pak by 111 bylo 100 + 10 + 1, tedy jedno sto jedenáct. 15
Binární na dekadickou Můžete určit dekadické hodnoty pro následující binární čísla? o11 o101 o110 o1111 o11011 16
Binární na dekadickou Tady jsou odpovědi: o11 je 3 při základě 10 o101 je 5 o110 je 6 o1111 je 15 o11011 je 27 17
Převody čísel: Dekadická na binární a n.z n + a n-1.z n-1 + + a 2.z 2 + a 1.z 1 + a 0.z 0 /z a n.z n-1 + a n-1.z n-2 + + a 2.z 1 + a 1.z 0 a 0 -zbytek /z a n.z n-2 + a n-1.z n-3 + + a 2.z 0 a 1 -zbytek /z a n.z n-3 + a n-1.z n-4 +... + a 2 -zbytek /z...... a n.z 0 a n-1 -zbytek /z 0 poslední číslice a n -zbytek --- Můžeme pak napsat výslední číslo: (a n a n-1.. a 2 a 1 a 0 ) Z 18
Převody čísel Dekadické na libovolné Musíme dělit dekadické číslo základem cílové číselné soustavy do té doby, než hodnota podílu bude menší jako základ soustavy. Příklad: (58) 10 = (111010) 2 58 : 2 = 29 + 0 29 : 2 = 14 + 1 14 : 2 = 7 + 0 7 : 2 = 3 + 1 3 : 2 = 1 + 1 1 : 2 = 0 + 1 19
Procvičování převodů (130) 10 = (?) 2 130 : 2 = 65 : 2 = 32 : 2 = 16 : 2 = 8 : 2 = 4 : 2 = 2 : 2 = 1 0 1 0 0 0 0 0 Přepíšeme číslice odzadu (130) 10 = (10000010) 2 Podíl po posledním dělení se nazývá MSB (most significant bit, tedy nejvýznamnější bit) Ověření správnosti převodu (10000010) 2 = 1.2 7 + 0.2 6 + 0.2 5 + 0.2 4 + 0.2 3 + 0.2 2 + 1.2 1 + 0.2 0 = 128 +0 + 0 + 0 + 0 + 0 + 2 + 0 = (130) 10 20
Procvičování převodů (130) 10 = (?) 7 130 : 7 = 18 : 7 = 2 4 4 (130) 10 = (244) 7 Ověření správnosti převodu (244) 7 = 2.7 2 + 4.7 1 + 4.7 0 = 98 + 28 + 4 = (130) 10 21
Procvičování převodů (130) 10 = (?) 16 - hexadecimální soustava 130 : 16 = 8 2 (130) 10 = (82) 16 Ověření správnosti převodu (82) 16 = 8.16 1 + 2.16 0 = 128 + 2 = (130) 10 22
Osmičkové na dekadické Váhy umístění číslic v oktalovém čísle jsou založeny na hodnotě 8. V číslu111 při základě 8, číslice nejvíc vpravo je na místě jedniček a její hodnota je 1. Technicky je váha toho místa 8 0. 23
Osmičkové na dekadické Druhá číslice zprava 111 je na místě osmiček, tedy 8 1 a má hodnotu 8. Třetí číslice 111 je na místě šedesát čtyřek, tedy 8 2 a má proto hodnotu 64. 24
Osmičkové na dekadické Celková dekadická hodnota tohoto osmičkového čísla 111 tedy je 64+8+1, neboli 73. 25
Osmičkové na dekadické Dokážete určit dekadické hodnoty pro následující oktalová čísla? o21 o156 o270 o1164 o2105 26
Osmičkové na dekadické Zde jsou odpovědi: o21 je 17 při základě 10 o156 je 110 o270 je 184 o1164 je 628 o2105 je 1093 27
Hexadecimalní na dekadickou Hexadecimální číslice mají váhy jednotlivých míst odvozené od základu 16. U čísla 111 se základem 16, číslice umístěná nejvíc vpravo, zastává místo jedniček a má hodnotu 1. Technicky to znamená váhu 16 0. 28
Hexadecimalní na dekadickou Druhá číslice zprava, tedy 111, je na místě šestnáctek a má tedy hodnotu 16. Technicky to znamená 16 1. Třetí číslice, ta nejvíc vlevo, tedy 111, je na místě dvěstě padesát šestek, a má hodnotu 256, což technicky znamená 16 2. 29
Hexadecimalní na dekadickou Celková hodnota hexadecimálního čísla 111, je v dekadickém vyjádření 256+16+1, tedy 273. 30
Hexadecimalní na dekadickou Dokážete najít dekadické ekvivalenty následujících hexadecimálních čísel? o2a o15f oa7c o11be oa10d 31
Hexadecimalní na dekadickou Tady jsou odpovědi: o2a je 42 při základu10 o15f je 351 oa7c je 2684 o11be je 4542 oa10d je 41229 32
Binární na osmičkové Převody mezi binárními a oktalovými čísly jsou velice snadné. Jelikož 2 umocněno na 3 je rovno 8, stačí nám tři binární číslice k vyjádření oktalových číslic. 33
Binární na osmičkové 000 při základě 2 je rovno 0 při základě 8 001 2 = 1 8 010 2 = 2 8 011 2 = 3 8 100 2 = 4 8 101 2 = 5 8 110 2 = 6 8 111 2 = 7 8 34
Binární na osmičkové Co dělat v případě, že máme víc, než tři binární číslice? Například 110011? Jednoduše rozdělíme binární číslice do skupin po třech, přičemž postupujeme z pravé strany, a každou skupinu třech číslic převedeme na příslušnou osmičkovou číslici. Tedy 110 011 při základě 2 = 63 při základě 8. 35
Binární na osmičkové Zkuste převést následující čísla: o111100 o100101 o111001 o1100101 Návod: pokud poslední skupina (tedy ta nejvíc vlevo) nemá tři členy, doplňte ji z levé strany nulami: 1100101 = 1 100 101 = 001 100 101 o110011101 36
Binární na osmičkové Zde jsou odpovědi: o111100 2 = 74 8 o100101 2 = 45 8 o111001 2 = 71 8 o1100101 2 = 145 8 o110011101 2 = 635 8 37
Binární na hexadecimální Převody mezi binárními čísly a hexadecimálními čísly jsou rovněž velmi jednoduché. Jelikož 2 umocněné na 4 se rovná 16, stačí nám 4 binární číslice k vyjádření všech hexadecimálních číslic. 38
Binární na hexadecimální 0000 při základě 2 se rovná 0 při základě 8 0001 2 = 1 16 0010 2 = 2 16 0011 2 = 3 16 0100 2 = 4 16 0101 2 = 5 16 0110 2 = 6 16 0111 2 = 7 16 1000 2 = 8 16 1001 2 = 9 16 1010 2 = A 16 1011 2 = B 16 1100 2 = C 16 1101 2 = D 16 1110 2 = E 16 1111 2 = F 16 39
Binární na hexadecimální V případě, že máme více než 4 binární číslice, např. 11010111, opětovně rozdělíme číslice do skupin po 4 číslicích, zase z pravé strany. Poté každou skupinu přímo převedeme na odpovídající šestnáctkovou číslici. 1101 0111 při základě 2 = D7 při základě 16 40
Binární na hexadecimální Zkuste následující příklady: o11011100 o10110101 o10011001 o110110101 Návod: pokud skupina nejvíc vlevo má méně než 4 číslice, doplňte li z levé strany nulami: 110110101 = 1 1011 0101 = 0001 1011 0101 o 1101001011101 41
Binární na hexadecimální Zde jsou výsledky: o11011100 2 = DC 16 o10110101 2 = B5 16 o10011001 2 = 99 16 o110110101 2 = 1B5 16 o1 1010 0101 1101 2 = 1A5D 16 42
Osmičkové na binární Převod osmičkových čísel na binární je přímou inverzí převodu binárních čísel na osmičkové. Každé osmičkové číslo tedy přímo převedeme na ekvivalentní skupinu třech binárních číslic. Například, 45 při základě 8 se rovná 100101 při základě 2. 43
Hexadecimální na binární Převod z hexadecimální soustavy do binární soustavy je přímou inverzí opačného převodu. Každá hexadecimální číslice se převede na ekvivalentní skupinu čtyř binárních číslic. Například, 45 při základu 16 se rovná 01000101 při základu 2. 44
Procvičování převodů Převeďte následující čísla na binární: o63 8 o123 16 o75 8 oa2d 16 o21 8 o3ff 16 45
Procvičování převodů Výsledky: o63 8 = 110011 2 o123 16 = 100100011 2 (odstranit vedoucí 0) o75 8 = 111101 2 oa2d 16 = 110000101101 2 o21 8 = 10001 2 o3ff 16 = 1111111111 2 46
Hexadecimální na oktalové Převod hexadecimálních čísel na oktalová je proces sestávající z dvou kroků. V prvním převedeme hexadecimální číslo na binární, poté přeskupíme binární číslice z původních skupin čtyř číslic na skupiny třech číslic. Pak výsledek převedeme na oktalové číslo. 47
Hexadecimální na oktalové Příklad: 4A3 16 = 0100 1010 0011 2 = 010 010 100 011 2 = 2243 8 48
Oktalové na hexadecimální Převod oktalového čísla na hexadecimální je analogický proces sestávající ze dvou kroků. Nejprve převedeme oktalové číslo na binární a přeuspořádáme trojice binárních číslic na čtveřice. Pak přímo vytvoříme relevantní hexadecimální číslo. 49
Oktalové na hexadecimální Například: 371 8 = 011 111 001 2 = 1111 1001 2 = F9 16 50
Procvičení převodů Převeďte následující čísla: 63 8 = 16 123 16 = 8 75 8 = 16 A2D 16 = 8 21 8 = 16 3FF 16 = 8 51
Procvičení převodů Výsledky jsou: 63 8 = 33 16 123 16 = 443 8 75 8 = 3D 16 A2D 16 = 5055 8 21 8 = 11 16 3FF 16 = 1777 8 52
Převody čísel dekadická dvojková a n.z n + a n-1.z n-1 + + a 2.z 2 + a 1.z 1 + a 0.z 0 /z a n.z n-1 + a n-1.z n-2 + + a 2.z 1 + a 1.z 0 a 0 -zbytek /z a n.z n-2 + a n-1.z n-3 + + a 2.z 0 a 1 -zbytek /z a n.z n-3 + a n-1.z n-4 +... + a 2 -zbytek /z...... a n.z 0 a n-1 zbytek /z 0 a n -zbytek --- poslední číslice Můžeme zapsat číslo : (a n a n-1.. a 2 a 1 a 0 ) Z 53
Převody čísel desítková libovolná Dělíme číslo v desítkové soustavě tak dlouho základem číselné soustavy, do které převádíme, dokud není zbytek menší než základ soustavy, do které převádíme. Př. (58) 10 = (111010) 2 58 : 2 = 29 + 0 29 : 2 = 14 + 1 14 : 2 = 7 + 0 7 : 2 = 3 + 1 3 : 2 = 1 + 1 1 : 2 = 0 + 1 54
Převody čísel - procvičení (130) 10 = (?) 2 130 : 2 = 65 : 2 = 32 : 2 = 16 : 2 = 8 : 2 = 4 : 2 = 2 : 2 = 1 0 1 0 0 0 0 0 přepíšeme odzadu (130) 10 = (10000010) 2 podíl po posledním dělení je MSB (most significant bit) kontrola převodu (10000010) 2 = 1.2 7 + 0.2 6 + 0.2 5 + 0.2 4 + 0.2 3 + 0.2 2 + 1.2 1 + 0.2 0 = 128 +0 + 0 + 0 + 0 + 0 + 2 + 0 = (130) 10 55
Převody čísel - procvičení (130) 10 = (?) 7 130 : 7 = 18 : 7 = 2 4 4 (130) 10 = (244) 7 kontrola převodu (244) 7 = 2.7 2 + 4.7 1 + 4.7 0 = 98 + 28 + 4 = (130) 10 56
Převody čísel - procvičení (130) 10 = (?) 16 130 : 16 = 8 2 (130) 10 = (82) 16 kontrola převodu (82) 16 = 8.16 1 + 2.16 0 = 128 + 2 = (130) 10 57
Operace v binární soustavě logický součet po bitech součet ve dvojkové soustavě zohledňuje přenosy 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 58
Převod desítkového čísla do binární podoby Používá se řada různých kódů. Kód je předpis pro přiřazení znaků (prvků) jedné množiny (množina obrazů) znakům jiné množiny (množina předmětů). Proces tohoto přiřazování se nazývá kódování. Zpětné přiřazení, tedy přiřazení předmětů obrazům, musí být jednoznačné. Prvky množiny obrazů nazýváme kódová slova. Proces zpětného přiřazování se nazývá dekódování. 59
Desetinná čísla Převod z dvojkové, šestnáctkové nebo jakékoliv jiné číselné soustavy do soustavy desítkové realizujeme tak, že číslo rozepíšeme na součet násobků mocnin základu dané soustavy, ale zápis se nám však obohatí o záporné mocniny (2-1, 2-2, 2-3,, resp. 16-1, 16-2, ). 60
Příklad Převeďte čísla 21C,8 16 a 1000011100,1 2 do desítkové soustavy. Řešení: 21C,8 16 = 2 16 2 + 1 16 1 + 12 16 0 + 8 16-1 = 512 + 16 + 12 + 0,5 =540,5 10. 1000011100,1 2 = 1 2 9 + 0 2 8 + 0 2 7 + 0 2 6 + 0 2 5 + 1 2 4 + 1 2 3 + 1 2 2 + 0 2 1 + 0 2 0 + 1 2-1 = 512 + 16 + 8 + 4 + 0,5 = 540,5 10. 61
Převod desetinného čísla z desítkové soustavy V případě převodu opačným směrem, tj. z desítkové soustavy do soustavy dvojkové, šestnáctkové nebo jiné, musíme vhodným způsobem modifikovat metodu opakovaného dělení pro převod desetinné části čísla. Celou část čísla převádíme běžným způsobem, tedy tak, že číslo postupně dělíme základem soustavy, do které jej převádíme, a zapisujeme přitom zbytky dělení. Výsledek dostaneme sepsáním těchto zbytků v opačném pořadí. Desetinnou část budeme základem výsledné soustavy pro změnu násobit. Z výsledku oddělíme jeho celou a desetinnou část, přičemž část desetinnou budeme dále násobit, zatímco celé části, sepsané tentokrát ve stejném pořadí, tvoří výsledek převodu. 62
Příklad Vyjádřete číslo 6,3 10 v binárním tvaru. Převod celé části Převod desetinné části 6:2=3, zbytek 0 0,3 2=0,6; celá část čísla: 0 3:2=1, zbytek 1 0,6 2=1,2; celá část čísla: 1 1:2=0, zbytek 1 0,2 2=0,4; celá část čísla: 0 0,4 2=0,8; celá část čísla: 0 0,8 2=1,6; celá část čísla: 1 0,6 2=1,2; celá část čísla: 1 Výsledek: Výsledek: 610 = 1102 0,310 = 0,0100112 63
Sčítání binárních čísel Binární čísla je možné sčítat stejným způsobem, jakým sčítáme čísla desítková. Příklad: Binárně Dekadicky 1 1 0 6 + 1 0 1 +5 1 0 1 1 11 64
Odčítání binárních čísel V případě rozdílu postupujeme obdobným způsobem, jako u sčítání. U příkladu uvedeného v tabulce nejprve odečteme 1 1=0 v pravém sloupci tak, jak je obvyklé, a v následujícím sloupci 1 0=1. Problémy nebude činit ani rozdíl 0 1 ve třetím sloupci zprava, kde odečítáme větší číslo od menšího. Binárně Dekadicky 1 0 1 1 11 1 0 1 5 1 1 0 6 65
Formát s pohyblivou řádovou čárkou čísla REAL 356 = 0,356. 10 3 0,0125 = 0,125. 10-1 semilogaritmický tvar čísla: X = M.10 E o M normalizovaná mantisa, např. ( 1 > M 0,1 ) obrovský rozsah číselných hodnot 66
Kódy Kód jako předpis může mít podobu slovního popisu, matematického výrazu, grafu, ale velice často bývá vyjádřen tabulkou přiřazení kódová tabulka. Kódování může být i vzájemně jednoznačné není jasné, co je obraz a co předmět, např. převod čísel mezi binární a hexadecimální soustavou. Číselné soustavy jsou také kódy, my si budeme dále všímat kódy pro kódování alfanumerických znaků vytvořených především pro reprezentaci dat při jejich přenosu, zpracování, zobrazování, či archivaci. 67
Binární kód Binární kód představuje způsob reprezentace informace a lze jej definovat jako konečný počet bitů. (Bit je základní jednotkou informace a může nabývat právě jedné ze dvou hodnot 0 nebo 1. Pomocí bitů je tak možno reprezentovat čísla vyjádřená v binární číselné soustavě.) V mnoha aplikacích, ve kterých pracujeme s číselnými hodnotami, stačí číselná data převést do binárního tvaru a v této podobě uložit nebo dále zpracovávat. Reprezentace čísel ve standardním binárním kódu však nemusí být vždy optimálním řešením. Samostatnou kapitolou je reprezentace nečíselných hodnot (např. znaků) v binárním kódu. Binárních kódů existuje velké množství. Jednotlivé kódy mají různé vlastnosti a používají se v různých situacích. Některé binární kódy jsou např. schopny detekovat nebo i opravit jednu (příp. i více) chyb. 68
Přímý kód 4 - bitové binární číslo hodnota přidání znaménkového bitu 0000 0 0 0000 +0 1 0000-0 0001 1 0 0001 +1 1 0001-1 0010 2 0 0010 +2 1 0010-2 0011 3 0 0011 +3 1 0011-3 0100 4 0 0100 +4 1 0100-4 0101 5 0 0101 +5 1 0101-5 0110 6 0 0110 1 0110-6 0111 7 0 0111 1 0111 1000 8 0 1000 1 1000 1001 9 0 1001 1 1001 1010 10 0 1010 1 1010 1011 11 0 1011 1 1011 1100 12 0 1100 1 1100 1101 13 0 1101 1 1101 1110 14 0 1110 +14 1 1110-14 1111 15 0 1111 +15 1 1111-15 69
Přímý kód a jeho vlastnosti D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 BYTE D 7 MSb Most Significant bit nejvyšší platný bit D 0 LSb Least Significant bit nejnižší platný bit znaménkový bit jednoduchý a názorný dvojí reprezentace nuly 0 10 = 0000 = +0, 8 10 = 1000 2 = -0 70
Inverzní kód pro převod do doplňkového kódu Kladná čísla stejná jako u přímého kódu U záporného čísla invertujeme všechny bity a přidáme 1 na MSb Pro 8 bitů rozsah +-128 Dvojí reprezentace nuly + 56 0011 1000-56 1100 0111 71
Záporná čísla dvojkový doplněk Dvojkový doplněk představuje způsob kódování záporných čísel v binární soustavě a usnadňuje výpočetním systémům operaci odčítání a aritmetické operace se zápornými čísly obecně. Chceme-li vypočítat rozdíl dvou čísel vyjádřených v binární číselné soustavě, můžeme jednoduše číslo, které chceme odečíst, převést na dvojkový doplněk provedením negace a následným přičtením jedničky a poté obě čísla jednoduše sečíst. Dvojkový doplněk čísla vždy závisí na počtu bitů, kterými čísla reprezentujeme, což je obvykle pomocí 8, 16, 32 nebo 64 bitů. V závislosti na reprezentaci je pak při tvorbě dvojkového doplňku nutné příslušným způsobem zarovnat počet bitů daného čísla (tj. doplnit číslo zleva nulami). 72
Dvojkový doplněk 73
Příklad Vytvořte dvojkový doplněk čísla 10110 2, pracujeme-li s osmibitovým vyjádřením čísla. Řešení: o Zarovnáme počet bitů čísla na osm: 00010110 o Provedeme negaci: 11101001 o Přičteme jedničku: 11101010 o Výsledkem je tedy číslo: 11101010 2 74
Znaménková expanze V doplňkovém kódu doplníme před číslo tolikrát znaménkový bit, až se šířky vyrovnají Používá se ke slučování slov nestejné šířky Příklad: 68 0100 0100-7 +1111 1001 61 10 0011 1101 d.k. 75
Kód BCD Kód BCD (binary-coded decimal binárně kódované dekadické číslo) je v číslicové technice jeden z často používaných binárních kódů. Používá se pro kódování desítkových číslic 0 až 9, přičemž každá z těchto číslic je kódována určitým (pevně daným) počtem bitů typicky čtyřmi (minimum, do jednoho bajtu je pak možno uložit dvě čísla v kódu BCD), příp. osmi (chceme-li pracovat s celými bajty). Hlavní výhodou kódu BCD je snadnost převodu čísla, které je vyjádřeno v kódu BCD, do formátu čitelného pro člověka 76
Kód BCD Binary Coded Decimal Přímý kód Shodný s kódem 8-4-2-1 (váhový kód) Má 4 prvky pro vyjádření jednoho řádu desítkového čísla Vhodný pro čítání a sečítání Menší efektivita při využití paměti (do jednoho bytu se dá uložit max. 100 čísel v kódu 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 77
Příklad Dekadicky: 123456 BCD: 0001 0010 0011 0100 0101 0110 Binárně: 11110001001000000 Vidíme, že převod mezi dekadickým číslem a číslem vyjádřeným v kódu BCD je triviální. Tento kód označujeme i kód BCD 8421, kde čísla 8421 vyjadřují váhy jednotlivých bitů. Platí, že dekadické číslo získáme jako N = b 3 8 + b 2 4 + b 1 2 + b 0 1 78
CCITT č.5 (MA5, ISO7), ASCII odvozen z abecedy (kódu) ASCII (= American Standard Code for Information Interchange) jeden z nejrozšířenějších kódů sedmiprvkový 26 písmen malé a velké abecedy 10 číslic 0 9 22 znamének a grafických znaků 34 řídících a služebních znaků 10 kódových značek pro národní provoz KOI 7 (Kód dlja Obměna Informacijej) 79
CCITT č.5 (MA5, ISO7), ASCII 80
UNICODE 16 bitů a více (podle verze) kapacita 65 536 značek (a více) Kompatibilní s ASCII přidáme nulový BYTE národní stránky 81
SHRNUTÍ číselné soustavy převody mezi nimi přímý, inverzní a doplňkový kód znakové sady 82