====== 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 >
{{:mgr-szz:ap-ap:znamenkovy_bit.jpg|}}
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 >
{{:mgr-szz:ap-ap:primy.jpg|}}
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:
{{:mgr-szz:ap-ap:inverzni.jpg|}}
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'' · ''z''''E'', 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í ======
http://www.allbusiness.com/glossaries/binary-addition/4954956-1.html
http://www.euroekonom.sk/download2/materialy-vs-informatika/Hardware-04-Aritmeticke-operace-a-obvody-pro-jejich-realizaci.pdf
====== 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ů.
~~DISCUSSION~~