Zpracoval:
[email protected] 11. Zobrazení dat a operace. Číselné soustavy. Sčítání, odčítání, posuvy, násobení a dělení ve dvojkové soustavě a zapojení příslušných obvodů. Zobrazení čísel se znaménkem a operace s nimi. Pohyblivá řádová čárka. Alfanumerické kódy. (A7B14SAP) I.
Zobrazení dat a operace. Uložení čísel v paměti: v pevné řádové čárce - fixed point, celá čísla (int, byte) v pohyblivé řádové čárce - floating point, racionální čísla (real, float, double) bez znaménka (unsigned), se znaménkem (signed) různá délka nebo rozsah hodnot (short int, int, long int, byte) Operace: aritmetické operace - sčítání, odčítání, násobení, dělení bitové operace - posuv (aritmetický, logický, rotace) operace v řádové mřížce - zaokrouhlení (nahoru, dolů, preference sudé číslice, preference většího čísla) Zobrazení čísel na počítači je limitováno (rozsahem registrů, paměť. Míst, apod.) Řádová mřížka. Určuje formát zobrazitelných čísel (tj. definuje nejvyšší řád n a nejnižší řád -m)
Základní vlastnosti: Délka ř.m. – počet řádů obsažených v ř.m. l = n + 1 + m Jednotka ř.m. – nejmenší číslo zobrazitelné v ř.m. ε = z-m Modul ř.m. – nejmenší celistvý násobek jednotky, který již v ř.m. zobrazitelný není Z = zn+1.O jednotku větší než nejvyšší zobrazitelné číslo Čísla zobrazitelná v řádové mřížce:0 ≤ A < Z, A = k *ε, k celé Chyby zobrazení: ztráta přesnosti – nelze zapsat číslice v nižších řádech, řeší se zaokrouhlením
přeplnění (overflow) – nelze zapsat číslice ve vyššíchřádech, představuje závažnou chybu
II.
Zobrazení čísel se znaménkem a operace s nimi. Nejpoužívanější číselné kódy: přímý aditivní doplňkový Přímý kód. Angl. Sign-magnitude code:
Aditivní kód. Angl. Biased code, Excess-K code:
Doplňkový kód. Angl. Two’s complement code (z=2), ten’s complement code (z=10):
III.
Číselné soustavy. Číselná soustava je soustava znaků a pravidel pro zobrazení čísel. Podle vlastností rozlišujeme: Polyadické (poziční) o Standardní – př. desítková soustava s arabskými číslicemi o Nestandardní – př. soustava pro vyjádření času Nepolyadické (nepoziční) př. římské číslice Zatím mají v počítačích největší význam standardní polyadické soustavy. Standardní polyadické soustavy jsou: Určeny bází – základem z, kde z N a z ≥ 2. Soustava s bází z je z-adická soustava Nejčastěji používané soustavy: z = 16 šestnáctková (hexadecimální) z = 2 dvojková (binární) z = 10 desítková (dekadická)
Zápis čísla v z-adické soustavě:
ai … z-adická cifra (číslice) na pozici i ai … hodnota číslice, 0 ≤ ai < z i … řád číslice (řádové místo, pozice) n … nejvyšší řád s nenulovou číslicí m … nejnižší řád s nenulovou číslicí Řád i číslice ai určuje její váhu vi = zi
Převody soustav:
(110,11)2 = (6,75)10 1*2-2 = 1*025 = 1*2-1 = 1*0.5 = 0*20 = 0*1 = 1*21 = 1*2 =
0.25 0.5 0.0 2.0__ 6.75
11,62510 = 1011,1012 11 mod 2 = 1; 11/2 =5 5 mod 2 = 1; 5/2=2 2 mod 2 = 0; 2/2=1 1 mod 2 = 1; Převod mezi příbuznými soustavami:
0,625*2 = 1 ,25 -> 1 0,25*2 = 0,5 -> 0 0,5*2 = 1 -> 1
IV.
Sčítání, odčítání, posuvy, násobení a dělení ve dvojkové soustavě a zapojení příslušných obvodů. Sčítání a odčítání v doplňkovém kódu.
Poloviční sčítačka (half-adder).
Úplná sčítačka (full-adder)
Více bitová sčítačka postupným šířením přenosu.
Odečítání čísla v doplňkovém kódu ⇔ přičítání záporného čísla 10 - 6 ⇔ 10 + (-6)
Přenos do vyšších řádů neříká nic o tom jestli číslo při výpočtu přeteklo. Přetečení detekujeme, pokud při sčítání dvou kladných čísel vyjde záporné, nebo při sčítání dvou záporných čísel vyjde kladné. Násobení.
Máme spočítat C = A*B. Mějme registry A, B, C1, C0 1. Vynuluj C1 (C1 = 0) 2. Posuň B doprava 3. Vypadla 1? • ANO C1 = C1 + A • NE nic 4. Posuň C1 doprava, přitom zasuň přenos ze sčítání 5. Posuň C0 doprava, přitom zasuň, co vypadlo z C1 6. Všechny bity B zpracovány? • NE jdi na 2. • ANO výsledek je C = (C1, C0). Konec.
Dělení.
Máme spočítat A : B = Q, zb. R. Mějme registry A, B, Q, R 1. Vynuluj R (R = 0) 2. Posuň A doleva 3. Posuň R doleva, přitom zasuň, co vypadlo z A 4. Porovnej: R >= B? ANO R = R – B, bit podílu = 1 NE bit podílu = 0 5. Posuň Q doleva, přitom zasuň bit podílu z 4. 6. Všechny bity A zpracovány? NE jdi na 2. ANO podíl je Q, zbytek je R. Konec. Přesunutí bitů ve slově. Posuv vlevo odpovídá násobení dvěma, posuv vpravo dělení dvěma. logický posuv - na uvolněná místa jsou vloženy 0 (0101 1101 -> 1011 1010) aritmetický posuv - posuv nemění znaménko (1101 1001 -> 1110 1100) cyklický - na uvolněné místo jsou uložené přeteklé bity (1101 1001 -> 1011 0011)
V.
Pohyblivá řádová čárka. Množina reálných čísel je v počítači reprezentována konečnou podmnožinou racionálních čísel – soustava čísel s pohyblivou řádovou čárkou (floating pointnumber system) Prvky této množiny lze zapsat:
Řádová mřížka má 2 části (podmřížky): mantisa (M) - informace o „hodnotě“ čísla, často zlomkový tvar exponent (e) - informace o pozici řád. čárky, celé číslo M i e používají kódy pro zobrazení záp. Čísel Příklad:
Aritmetické operace: sčítání/odčítání: Srovnat exponenty a sečíst/odečíst mantisy. násobení: Sečíst exponenty a vynásobit mantisy. dělení: Odečíst exponenty a vydělit mantisy. porovnání: Srovnat exponenty a porovnat mantisy. posuv: Posunem mantisy nebo zvětš./zmenš. exponentu. Normalizace doplňkového kódu:
Skrytá jednička předpokl. z = 2, normaliz. tvar, M přímý kód, M ¹ 0, A(e) ¹ 0 ⇒ v nejvyšším řádu mantisy bude vždy 1 ⇒ tuto 1 můžeme „skrýt“ (tj. vynechat ze zápisu čísla v ř.m.)
VI. Alfanumerické kódy. Používané například jako metoda kódování textu. Rozlišujeme znakovou sadu a kódování. Znaková sada (např. unicode) definuje seznam znaků. Kódování určuje numerický kód pro jednotlivé znaky znakové sady. Nemusí definovat kód pro všechny znaky. Pokud není definovaná endianita (pořadí bytů ve slově), tak se u více bajtových kódování používá BOM (byte order mark). Je poslán jako první znak textu a nemá jiný význam než určení pořadí bytů v jednom znaku. ASCII 7 bit - anglická abeceda + speciální symboly ASCII 8 bit - různá kódování - české : windows-1250, iso-8859-2, a další už historické UTF 8 o variabilní počet bajtů na znak 1 až 4 je o ASCII kompatibilní (znaky definované v ASCII jsou kódované 7 bity - 0XXX o určení počtu bytů na znak - 110X XXXX(2 byty), 1110 XXXX(3 byty), 11110XXX(4 byty), 10XX XXXX (2 a další byte) o používá se pro přenos dat mezi počítači o BOM - 0xEF 0xBB 0xBF UTF 16 (UCS 2) o 2 bajty na znak o používá se pro vnitřní reprezentaci textu v programu o není vhodné pro přenos dat mezi počítači (definuje speciální symboly, které se o na jednotlivých platformách můžou lišit. např. konce řádků, oddělovač souborů, o ukončovací 0 atd.) o BOM - 0xFE 0xFF