Obsah 11. přednášky: Kódování dat - terminologie Rozdělení kódů Kódování čísel Kódování znaků
Tato tematika je zpracována v Záznamy přednášek: str. 214 – 235 + materiál: PrikladyZobrazeniCisel.pdf
Jak bude probíhat zkouška?! (podrobné informace na portálu)
Přednášky KIV/PPA1,© A. Netrvalová, 2010
11. přednáška
Kódování dat - terminologie Data - informace, které jsou v průběhu výpočtu uloženy v paměti počítače nebo na vnějším mediu. Typy dat: čísla, texty, obrázky, zvuky atd.
Kódování - převod dat na posloupnost bytů (bitů) Kapacita kódu o n bitech - počet zobrazitelných hodnot Příklad
2 4 počet bytů 1 16 32 počet bitů 8 kapacita 256 65536 4294967296
Rozdělení kódů dle charakteru kódovaných dat – znakové – číselné – ostatní (formáty) ~ grafické, zvukové, ...
Znakové kódy - každý znak zvolené abecedy reprezentován
nezáporným celým číslem.
– ASCII: 7 bitový kód pro anglickou abecedu – Unicode: 16 bitový mezinárodní kód (Java) – Windows 1250: 8-bitový kód Microsoft (CZ) – ISO/IEC 8859-2: 8-bitový standardizovaný kód (CZ) používaný v OS Linux Strana 2 (celkem 10)
Číselné kódy – celočíselné ◦ bez znaménka ◦ znaménkové přímý inverzní doplňkový s posunutou nulou – reálné ◦ jednoduchá přesnost ◦ dvojnásobná přesnost
Kódování čísel Poznámka - výklad celočíselných kódů na 8 bitech
Celočíselné kódy Kód bez znaménka (nezáporná čísla) binární zápis čísla (užití: zobrazení logické hodnoty) Př.: 0001 0111 = 23
Znaménkové kódy Přímý kód nezáporná čísla + znaménkový bit(Most Significant Bit) Nevýhoda: dvojí zobrazení nuly (kladná a záporná) Užití: zobrazení mantisy reálných čísel Př.: 1001 0111 = -23 1000 0000 = 0000 0000 = 0 Strana 3 (celkem 10)
Inverzní kód (tzv. jedničkový doplněk) kladná čísla - binární zápis záporná čísla - binární zápis + změna 0→1 a 1→0 Nevýhoda: opět „dvojí“ nula Užití: bitové operace, při převodu na doplňkový kód Př.: 0001 0111 = 23 1110 1000 = -23 1111 1111 = 0000 0000 = 0
Doplňkový kód (tzv. dvojkový doplněk) kladná - binární zápis záporná - inverze binárního zápisu + 1 Výhody: ◦ zobrazení nuly: 0000 0000 ◦ odečítání: přičítáním záporného čísla Nevýhody: ◦ nesymetrický rozsah: -128 až 127 ◦ vznik tzv. přetečení: 127+1= -128 (častá chyba!!!) Užití – zobrazení znaménkových čísel Př.: 0001 0111 = 23 1110 1000 = -23 postup: 0001 0111→1110 1000 +1→1110 1001 1111 1111 = -1 Př.: 0001 1110 = 30
1110 0010 = -30
(jednodušší způsob převodu)
Strana 4 (celkem 10)
Kód s posunutou nulou - základem je lineární posun nuly, nula je uprostřed rozsahu 2n-1-1 (ilustrace na n=8) - 0000 0000: největší záporné číslo - 0111 1111: 0 - 1111 1111: největší kladné číslo Nevýhoda: kladná čísla odlišná od binární reprezentace Použití: zobrazení exponentu reálných čísel Př.: převod: číslo +27-1 27-1+23 1001 0110 = 23
27-1-23 0110 1000 = -23
Kódování reálných čísel - aproximace reálného čísla - tzv. zobrazení v pohyblivé řádové čárce - formát IEEE 754 - jednoduchá přesnost (4 byty) - dvojnásobná přesnost (8bytů)
4 byty: 1 bit znaménko (mant.), 8 bitů exponent, 23 bitů mantisa Strana 5 (celkem 10)
Znaménkový bit mantisy 0 – kladná, 1- záporná Mantisa – přímý kód (binární) - normalizace mantisy: 1≤ mantisa ≤ základ - určuje přesnost (numerické chyby při výpočtech!) - první bit mantisy=1, ale nezobrazuje se (skrytý), reprezentuje jedničku před desetinnou čárkou Exponent – v kódu s posunutou nulou - určuje rozsah Formát - kompromis mezi přesností a rozsahem -45 - rozsah ~ | 10 ÷ 1038| - přesnost 6 - 7 desetinných míst 00000000 00000000 00000000 00000000 reálná 0 Hodnota čísla x = (-1)znaménko ⋅ 2exp-127 ⋅ 1,mantisa
Př.: Zobrazte v IEEE (na 4 bytech) číslo: -258,125 Postup výpočtu
258(10) = 100000010(2) ( 256 +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)
Strana 6 (celkem 10)
100000010,001(2)
normovaný tvar: 1,00000010001*28 exp.: 27-1+8 =27+7=10000000 +111=10000111 258,125(10) = 1100 0011 1000 0001 0001 0000 0000 0000 (2) =
C
3
8
1
1
0
0
0 (16)
Př.: Zobrazte v IEEE (na 4 bytech) číslo: 0,5 0,5(10) = 0,1(2) 1,0 *2-1 27-1-1 = 0111 1110 = 0011 1111 0000 0000 0000 0000 0000 0000 (2) = 3 F 0 0 0 0 0 0 (16) Problematika přetečení (viz dříve) - příliš malá čísla (<MIN) – zaokrouhlení na 0 - příliš velká čísla (>MAX) – zaokrouhlení na ∞ Operace s reálnými čísly – nutná obezřetnost - sčítání řádově velmi odlišných čísel - násobení (exp se sčítají, mantisy násobí) - nepoužívat == (porovnání na rovnost)
Kódování logických hodnot pouze 2 hodnoty (true, false) - celočíselný kód bez znaménka Strana 7 (celkem 10)
Kódování znaků – pro zájemce velice podrobné informace v Záznamech přednášek (str. 221-235), zde jen přehled kódů
Úvodní poznámka - týká se všech datových typů Datový typ má více bytů a záleží na pořadí jejich ukládání do paměti - 2 možnosti: - big-endian (BE) - vyšší řády na nižší adrese - little-endian (LE) - vyšší řády na vyšší adrese Př.: celé číslo: 01A2B3C4(16) (27440068(10)) ukládáme do paměti od adresy 1000 BE: 01 A2 B3 C4 LE: C4 B3 A2 01 Často oba systémy na témže PC, způsob uložení závisí na - procesoru - OS - programovacím jazyce
Terminologie – nejednotná (dále terminologie z Unicode – Character Encoding Model)
Znaková sada – množina kódovaných znaků US ASCII, ISO8859-1,Unicode, ...
Kódovací schéma (charset) Strana 8 (celkem 10)
US-ASCII -
sedmibitový charset nemůže zobrazit akcenty anglické dokumenty, zdrojové kódy programů
ISO-8859-2 8-bitový charset pro východní Evropu
Windows-1250 8-bitový charset Microsoft od předchozího se liší znaky š,Š,ž,Ž,ť,Ť
IBM852 – MS-DOS Latin-2 8-bitový charset IBM používaný v MS DOS a konzolovém okénku Win
xMacCentralEurope – Macintosh Latin-2 8-bitový charset Macintosh
Unicode charsety: UTF-8, UTF-16, UTF-32 LE,BE – značka bytového pořadí
UTF-8 1992 – pro kódování znaků Unicode posloupností bytů - 1 byte pro znaky anglické abecedy(jako ASCII) - 2 byty pro akcentované znaky Výhoda - úsporné, Nevýhoda – znaky nestejné délky, nelze aplikovat přímý přístup Strana 9 (celkem 10)
UTF-16 1996 - rozšíření, znaky 2 byty, oproti předchozímu dvojnásobná velikost
UTF-32 1999
Strana 10 (celkem 10)