Obsah
N-AP6
Zadání
Číselné soustavy, vztahy mezi číselnými soustavami, zobrazení čísel v počítači, principy provádění aritmetických operací.
Číselné soustavy
Číselná soustava je způsob reprezentace čísel.
Podle způsobu určení hodnoty čísla z dané reprezentace rozlišujeme dva hlavní druhy číselných soustav: poziční číselné soustavy a nepoziční číselné soustavy. Dnes se obvykle používají poziční soustavy, kde se čísla vyjadřují jako součet mocnin o jistém základu násobených jednoduchými činiteli.
Nepoziční číselná soustava
je způsob reprezentace čísel, kde hodnota číslice je dána jejím symbolem a nezávisí na její pozici v zapsaném čísle. Tyto způsoby zápisu čísel se dnes již téměř nepoužívají a jsou považovány za zastaralé.
V nejjednodušším systému stačí sečíst hodnoty jednotlivých číslic. Pokud by například byly hodnoty symbolů následující: A = 1, B = 10, C = 100, D = 1000, pak by vyjádřením čísla 3542 mohl být například řetězec „AABBBBCCCCCDDD“.
Příkladem nepoziční soustavy jsou Římské číslice. http://cs.wikipedia.org/wiki/Ř%C3%ADmské_č%C3%ADslice.
Poziční číselné soustavy
je dnes převládající způsob písemné reprezentace čísel – dokonce, pokud se dnes mluví o číselných soustavách, jsou tím obvykle myšleny soustavy poziční. V tomto způsobu zápisu čísel je hodnota každé číslice dána její pozicí v sekvenci symbolů. Každá číslice má touto pozicí dánu svou váhu pro výpočet celkové hodnoty čísla.
Nejznámější soustavou je soustava desítková, kde se číslo vyjadřuje jako součet mocnin deseti vynásobených jednoduchými součiniteli. Součinitelé mohou nabývat hodnot 0,1,…,9 a nazývají se číslice.
Pro zobrazení v počítači jsou vhodnější soustavy o jiných základech např. dvojková, šestnáctková (zde se číslice 10…15 nazývají písmeny A..F) nebo osmičková.
Polyadické soustavy
Polyadické soustavy jsou speciálním případem pozičních soustav.
Základ – počet symbolů pro číslice používaných v dané soustavě
Řád -– váha číslice
zápis
číslo = součet mocnin základu vynásobených číslicemi
A = an · zn + an−1 · zn−1 + · · · + a1 · z1 + a0 · z0
A = 1 · 102 + 2 · 101 + 3 · 100
zhuštěný zápis
běžná je forma zhuštěného zápisu:
A = anan−1 . . . a1a0
A = 123
A = 12310
• Zobecnění pro racionální číslo (zavedeme záporné mocniny): A = an · zn +· · ·+a0 · z0 +a−1 · z−1 +a−2 · z−2 +· · ·+a−m · z−m
• Zobecnění pro záporná čísla – přidáním znaménka (pro počítače nevhodné)
• Zobecnění pro komplexní čísla – zavedením imaginární jednotky
Příklad číselné soustavy se základem 2 (tj. dvě číslice 1,0) a výpočet jeho hodnoty:
(10010)2 = 0 · 20 + 1 · 21 + 0 · 22 + 0 · 23 + 1 ·24
Vztahy mezi číselnými soustavami
Jednoduše lze převádět mezi soustavami, kde základ jedné soustavy tvoří základ mocniny druhé. Např. mezi dvojkovou, osmičkovou a šestnáctkovou soustavou. Číslo v soustavě o základu zk (kde z a k jsou přirozená čísla) lze převést do soustavy o základu z jednoduše.
Převody:
| 2 ←→ 8 | 8 ←/→ 16 |
| 2 ←→ 16 | 2 ←/→ 10 |
Každou k-tici číslic nižší soustavy nahradíme číslici soustavy vyšší.
Např. 0011 1011 01002 = 3B416
Převod 2 → 8
Například pro číslo 1110101102=?8.
Vytvoří se pomocná tabulka:
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
A s ní se číslo převede 1112 ~ 78 | 0102 ~ 28 | 1102 ~ 68 == 7268
Převod 2 → 16
Například pro číslo 1110010111012=?16.
Vytvoří se pomocná tabulka:
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
| 8 | 1000 |
| 9 | 1001 |
| A | 1010 |
| B | 1011 |
| C | 1100 |
| D | 1101 |
| E | 1110 |
| F | 1111 |
A s ní se číslo převede 11102 ~ E16 | 01012 ~ 516 | 11012 ~ D16 == E5D16
Převod 8 → 2
Číslo se jednoduše převede podle zmíněných tabulek.
Převod 16 → 2
Číslo se jednoduše převede podle zmíněných tabulek po jednotlivých pozicích.
Převod 2 → 10
Číslo lze převést jako součet mocnin dvojek.
Například pro číslo 1100,00110011002 = ?10
Celá část:
1 · 23 + 1 · 22 + 0 · 21 + 0 · 20 = 1 · 8 + 1 · 4 + 0 · 2 + 0 · 1 = 12
Desetinná část:
0 · 2−1 + 0 · 2−2 + 1 · 2−3 + 1 · 2−4 + 0 · 2−5 + 0 · 2−6 + 1 · 2−7 + 1 · 2−8 + … = 0 · 0,5 + 0 · 0,25 + 1 · 0,125 + 1 · 0,0625 + … = 0,19999…
Rešení: zaokrouhlení dle poslední číslice rozvoje.
Převod 10 → 2
Převod se provede jako dělení se zbytkem.
Například pro číslo 12,210 = ?2
Celá část:
| 12 | : 2 |
| 6 | 0 |
| 3 | 0 |
| 1 | 1 |
| 0 | 1 |
Desetinná část:
| 0, | 2 | · 2 |
| 0, | 4 | · 2 |
| 0, | 8 | · 2 |
| 1, | 6 | (0,6 · 2) |
| 1, | 2 | (0,2 · 2) |
| 0, | 4 | · 2 |
| 0, | 8 | · 2 |
| 1, | 6 | · 2 |
| . . . | . . . |
12,210 = 1100,0011001…2 (výsledek celé části se čte od konce.)
Zobrazení čísel v počítači
Čísla se mohou v paměti počítače v binárním tvaru zobrazovat buď jako:
• Little endian – LSB je na nejnižší adrese (little end first).
• Big endian – MSB je nejnižší adrese (big end first).
(LSB – Least Significant Byte, MSB – Most Significant Byte)
1) Zobrazení kladných čísel
Rozsah zobrazení bez použití znaménkového bitu je < 0; 2n − 1 >, kde n je počet bitů.
Zobrazení např. na 4 bitech (n = 4):
| 0 | 0 | 0 | 0 | 0 | |
| 0 | 0 | 0 | 1 | 1 | |
| 1 | 0 | 0 | 0 | 8 | |
| 1 | 0 | 0 | 1 | 9 | |
| 1 | 1 | 1 | 1 | 15 | |
rozsah zobrazení při použití znaménkového bitu: < -2n-1; 2n-1 − 1 >
Například pro 16-bitový integer je rozsah (-32768, 32767)
2) Zobrazení záporných čísel
- Přímý kód – jen přidání znaménkového bitu, nevýhodou je záporná nula
- Inverzní kód – obrácení jedniček a nul
- Dvojkový doplňkový kód – obrácení jedniček a nul + přičtení jedničky
a) Přímý kód se znaménkem
První bit určuje kladnost (0), respektive zápornost (1) čísla
rozsah zobrazení je < -2n-1+1;-0 >

pozor! existence dvou nul → -0 a 0
b) Inverzní kód
rozsah zobrazení je < -2n-1+ 1;-0 >
první bit tedy určuje zápornost
záporná čísla se invertují, tedy:

pozor! existence dvou nul → -0 a 0
c) Doplňkový kód
rozsah zobrazení je < -2n-1; 2n-1-1>
Pro zápis kladného čísla jen převedeme číslo do dvojkové soustavy stejně, jako číslo bez znaménka.
U doplňkového kódu vyřešen problém dvou nul.
Postup pro zobrazování záporných čísel v doplňkovém kódu:
1. zobrazit kladné číslo v binární soustavě
2. prohodit 1 a 0 v zápise binárního čísla (udělat inverzi čísla)
3. přičíst 1
d) Kód s posunutou nulou
V kódu s posunutou nulou využíváme bázi posunutí (standardně 27 - 1). K této bázi přičteme požadované číslo a výsledek zobrazíme. PRIKLAD: číslo (55) zobrazte na 8 bitů: 2^7 - 1 +55 = 128 - 1 + 55 = 182 = =(10110110) analogicky záporné číslo (-55) na 8 bitů: 2^7 - 1 -55 = 128 - 1 - 55 = 72 = (1001000)
3) Zobrazení reálných čísel
Zobrazení reálných nebo příliš velkých celých čísel se provádí v pohyblivé řádové čárce. Čísla jsou zobrazena ve tvaru:
č = M · zE, kde
M … mantisa čísla, zobrazená v soustavě o základu z
E … exponent
z … základ pro výpočet exponentové části
Jedním z používaných formátů pro zobrazení čísel v pohyblivé řádové čárce je formát podle standardu IEEE 754 (Institute of Electrical and Electronic Engineers) používaný v moderních počítačích.
Struktura čísla:
| znaménkový bit (1 b) | exponent (8 b) | mantisa (23 b) |
Znaménkový bit
- kladné číslo má znaménkový bit nulový, u záporného čísla je tento bit jedničkový
Exponent
- je uložen na 8 bitech v kódu s posunutou nulou, báze posunutí je 27 - 1 = 127
- příklad: exponent 410 je uložen jako 4 + 127 = 131 = 1000 00112
Mantisa
- je znázorněna 23 bity v přímém kódu
- první bit (na nulté desetinné pozici) se neukládá, bere se implicitně jako 1 (mantisa se tedy ukládá počínaje druhým bitem)
- myšlená desetinná tečka je umístěna za nejvyšším bitem mantisy
- příklad: mantisa 1,562510 je desetinné číslo 1 + 0,5 + 0,0625 = 20 + 2-1 + 2-4 = 1,10012 a uloží se jako 100 1000 0000 0000 0000 0000
Příklad
Zobrazte číslo (-258,125)10 ve formátu IEEE (na 4 bytech):
(258)10 = (100000010)2
0,125 · 2 = 0,25 0
0,25 · 2 = 0,5 0
0,5 · 2 = 1,0 1
(0,125)10 = (0,001)2
(258,125)10 = (100000010,001)2
Nyní je nutné provést normalizaci – pomocí násobku čísla s mocninami dvojky číslo převést do intervalu [1, 2):
nenormalizované = normalizované · 2n, kde n je hledaná mocnina.
norm. tvar: 1,00000010001 · 28
exponent: 27 - 1 + 8 = 27 + 7 = 10000000 + 111 = (10000111)
Jelikož se předpokládá normální tvar, jednotka na místě před desetinou čárkou se nezapisuje:
(-258,125)10 = (1100 0011 10000 0010 0010 0000 0000 000)IEEE
Příklad převodu čísla -118.625
1. Nejprve vezmeme znaménko, tj. první bit bude „1“
2. Zapíšeme číslo v binární podobě. 1110110.101.
3. Posuneme desetinnou čárku. 1.110110101 x 26
4. Mantisa je část za desetinnou čárkou a vyplní se nulami až se dostane celých 23 bitů
5. Exponent je 6. Nejdřív se přičte 127 a zkonverujte na binární formu: 6 + 127 = 133 10000101
6. Vznikne číslo: 1 1000 0101 1101 1010 1000 0000 0000 000
Principy provádění aritmetických operací
Předměty
PB151 Výpočetní systémy
Použitá literatura a weby
http://statnice.dqd.cz/home:prog:ap1
IEEE convertor: http://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html
Vypracoval
Marek Menšík UČO 255679
Z mě strany hotovo
Nevím přesně, kdo otázky zpracoval přede mnou, pouze jsem je sem umístil, doplnil chybějící věci a opravil nepřesnosti. Připomínám, že věci zde uvedené nemusí být korektní a zatím neprošly kontrolou zádného z profesorů.

Diskuze
Je tohle spravne?
(-258,125)_10 = (1100 0011 1100 1000 0000 0000 0000 0000)_IEEE
Spis mi to vychazi:
(-258,125)_10 = (1100 0011 1000 0001 0001 0000 0000 0000)_IEEE
Ano, tvuv vysledek je skutecne spravne.
Jinak u statnic se ptali na scitani v inverznim a dvojkovem kode a chteli nakreslit scitacku. To tady chybi.