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 počet bytů 1 2 4 počet bitů 8 16 32 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 2 n-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 +2 7-1 2 7-1+23 2 7-1-23 1001 0110 = 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 - rozsah ~ 10-45 10 38 - přesnost 6-7 desetinných míst 00000000 00000000 00000000 00000000 reálná 0 Hodnota čísla x = (-1) znaménko 2 exp-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,125 (10) = 0,001 (2) 0,25 2 = 0,5 0 0,5 2 = 1,0 1 258,125 (10) = 100000010,001 (2) Strana 6 (celkem 10)
100000010,001 (2) normovaný tvar: 1,00000010001*2 8 exp.: 2 7-1+8 =2 7 +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 2 7-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)