kodowanie informacji Autor prezentacji: 1 prof. dr hab. Maria Hilczer
Liczba całkowita to ciąg cyfr d n d n-1... d 2 d 1 d 0 system dziesiętny podstawa = 10 d i = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 liczba (10) = 10 n d n + 10 n-1 d n-1 +... + 10 2 d 2 + 10 1 d 1 + 10 0 d 0 np. liczba 369 to 10 2 3 + 10 1 6 + 10 0 9 2
system ósemkowy podstawa = 8 d i = 0, 1, 2, 3, 4, 5, 6, 7 liczba (8) = 8 n d n + 8 n-1 d n-1 +... + 8 2 d 2 + 8 1 d 1 + 8 0 d 0 system dwójkowy podstawa = 2 d i = 0, 1 liczba (2) = 2 n d n + 2 n-1 d n-1 +... + 2 2 d 2 + 2 1 d 1 + 2 0 d 0 system szesnastkowy podstawa = 16 d i = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F [ 10 11 12 13 14 15 ] liczba (16) = 16 n d n + 16 n-1 d n-1 +... + 16 2 d 2 + 16 1 d 1 + 16 0 d 0 3
Dlaczego wybieramy system dwójkowy? Powody techniczne: układy elektroniczne są łatwe w budowie są odporne na zakłócenia są miniaturowe i tanie Prosta arytmetyka dwójkowa: jedna formuła dodawania dwójkowego 1 + 1 = 10 jedna formuła mnożenia dwójkowego 1 1 = 1 (bo mnożenie przez zero daje zawsze zero) 4
Przykład - przeliczenia na system dziesiętny: 4 3 2 1 0 1 1 0 0 1 (2) = 1 2 4 + 1 2 3 + 0 2 2 + 0 2 1 + 1 2 0 2 1 0 1 0 = 25 (10) 1 6 7 (8) = 1 8 2 + 6 8 1 + 7 8 0 = 119 (10) A B (16) = A 16 1 + B 16 0 = 10 16 1 + 11 16 0 = 171 (10) 5
Przykład - przeliczenia na inne systemy: 67 (10) = 1000011 (2) = 103 (8) = 43 (16) 67 : 2 = 1 001-000-011 33 : 2 = 1 16 : 2 = 0 1 0 3 ósemkowy 8 : 2 = 0 4 : 2 = 0 2 : 2 = 0 0100-0011 1 : 2 = 1 4 3 szesnastkowy dwójkowy 1000011 6
bit (b) - najmniejsza jednostka informacji. W systemie dwójkowym reprezentuje pojedynczą cyfrę 0 lub 1. BAJT (B) - to 8 bitów 1 kilobajt = 1 KB = 1024 B = 2 10 B 1 megabajt = 1 MB = 1024 KB = 2 20 B 1 gigabajt = 1 GB = 1024 MB = 2 30 B 1 terabajt = 1 TB = 1024 GB = 2 40 B 1 petabajt = 1 PB = 1024 TB = 2 50 B 1 eksabajt =1 EB = 1024 PB = 2 60 B 1 zettabajt = 1 ZB = 1024 EB =2 70 B 1 jottabajt = 1 YB = 1024 ZB = 2 80 B 1 brontobajt = 1 BB = 1024 YB = 2 90 B 7
1 kilobajt ile to właściwie jest?? bajt terabajt kilobajt megabajt gigabajt Rys. wg Z. Postawa, UJ 8
Stosowanie przedrostków kilo, mega, giga, tera, itd. jest niezgodne z określeniami układu SI np. kilo w układzie SI oznacza 1000, a nie 1024, jak stosuje się dla bajtów Jest to częstym źródłem nieporozumień zwłaszcza co do faktycznej pojemności dysków, których producenci z powodów marketingowych wolą stosować oznaczenia zgodnie z układem SI. 9
Czym różni się doświadczony informatyk od początkującego? Początkujący uważa, że 1 kb to 1000 B, a doświadczony jest pewien, że 1 km to 1024 m 10
Kodowanie to przyporządkowanie obiekty zbioru kodowanego słowa kodowe przy czym każdemu słowu kodowemu musi odpowiadać dokładnie jeden element kodowany Kodowanie liczby całkowitej to przyporządkowanie jej odpowiedniej liczby binarnej np. 5 (10) = 101 (2) 0 0 0 0 0 1 0 1 bit znakowy 0 dla liczb dodatnich 1 dla liczb ujemnych 11
Problem z liczbami ujemnymi + 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0-5 +3-8?! 12
kod uzupełnień U2 naturalny kod binarny 1. Zapisujemy moduł liczby w systemie dwójkowym 0 0 0 0 0 1 0 1 2. Negacja, tzn. zamiana 0 na 1 i odwrotnie 1 1 1 1 1 0 1 0 3. Korekcja, tzn. dodanie 1 zgodnie z zasadami arytmetyki dwójkowej 1 1 1 1 1 0 1 1-5 zapisane w kodzie uzupełnień 13
1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 kod uzupełnień -5 +3 Suma w kodzie uzupełnień < 0 negacja korekcja moduł wyniku = 2 wynik = -2 14
kod uzupełnień U2 jest obecnie najpopularniejszym sposobem zapisu liczb całkowitych oraz ułamkowych przedstawionych w formacie stałoprzecinkowym. Jego popularność wynika z faktu, że operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. W U2 na n bitach da się zapisać liczby z zakresu: dla przykładu od -2 n-1 do 2 n-1-1 dla n = 8 zapisujemy liczby od -128 do 127 (jeden bajt) dla n =16-32768 do 32767 (dwa bajty) 15
dodajemy: Nadmiar - overflow + 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 0 100 (10) + 100 (10) 200 (10) liczba ujemna! 16
Liczba ułamkowa to ciąg cyfr c -1 c -2 c -3... system dwójkowy ułamek (2) = 2-1 c -1 + 2-2 c -2 + 2-3 c -3 +... np. 0,6875 (10) = 1011 (2) 0,35 (10) = 01011001100... 0,6875 2 = 1,3750 0,3750 2 = 0,750 0,750 2 = 1,5 0,5 2 = 1 17
Kodowanie liczby rzeczywistej stosujemy zapis zmiennoprzecinkowy dla liczb dziesiętnych np. 5,25 0,525 10 1 mantysa m 2 n wykładnik mantysa m 10 n wykładnik dla liczb binarnych 101,01 0,10101 2 11 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 mantysa (ułamek) wykładnik (liczba całkowita) 18
Błędy zaokrągleń 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 0 0,35 (10) 0,35 (10) 0,7 (10) jeden bajt 1 2-1 + 1 2-3 + 1 2-4 = 0,6875 (10) 0 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 dwa bajty 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0,6875 + 1 2-7 + 1 2-8 + 1 2-11 + 1 2-12 = 0,6999512 19
pojedyncza precyzja mantysa 23 bity wykładnik 8 bitów znak 1 bit mantysy mantysa pozwala zapisać 7 cyfr po przecinku max liczba 3,4 10 38 20
podwójna precyzja mantysa 52 bity wykładnik 11 bitów znak 1 bit mantysa pozwala zapisać 15-16 cyfr po przecinku max liczba 1,8 10 308 rozszerzona podwójna precyzja mantysa 64 bity wykładnik 15 bitów znak 1 bit mantysa pozwala zapisać 19 cyfr po przecinku max liczba 1 10 3114 21
Kodowanie znaków? 22
ASCII skrót od American Standard Code for Information Interchange pierwsza edycja opublikowana w 1963 r., potem kilkakrotnie modyfikowana Amerykański standardowy kod do wymiany informacji to kod przyporządkowujący liczby z zakresu 0-127 literom (alfabetu angielskiego), cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterującym. 128 = 2 7 zatem kod ASCII jest 7-bitowy Rozszerzony kod ASCII zagospodarowuje ósmy bit, tzn. pozwala na zakodowanie 2 8 = 256 znaków bałagan! firma IBM wprowadziła go dla IBM PC i opracowała wersje dla innych języków; firma Apple Computer opracowała swoje własne rozszerzenia, itd.
kody od 0 do 31 to znaki sterujące, służące do sterowania urządzeniem (np. drukarką) 0 zero 1 początek nagłówka 2 początek tekstu 3 koniec tekstu 4 koniec transmisji 5 nawiązanie łączności 6 potwierdzenie 7 sygnał dźwiękowy 8 usunięcie znaku 9 tabulator poziomy 10 nowy wiersz 11 tabulator pionowy 12 nowy arkusz/nowa strona 13 powrót karetki [ Enter ] 14 włączenie specjalnego zestawu znaków 15 wyłączenie specjalnego zestawu znaków 24
16 zmiana znaczenia kolejnych znaków 17 sterowanie urządzeniem 1 18 sterowanie urządzeniem 2 19 sterowanie urządzeniem 3 20 sterowanie urządzeniem 4 21 potwierdzenie negatywne 22 synchronizacja w stanie bezczynności 23 koniec bloku transmisji 24 anulowanie 25 koniec nośnika 26 znak do zastąpienia 27 przełączenie znaczenia kodu [ Esc ] 28 separator pliku 29 separator grupy 30 separator rekordu 31 separator jednostki 25
kody od 32 do 127 to znaki uzyskiwane z klawiatury 32 spacja 33! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44, 45-46. 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 125 126 ~ 127 DEL
kody od 128 do 255 w rozszerzonym kodzie ASCII firmy IBM był wykorzystywany do: sterowania drukarką stosowania w DOS znaków diakrytycznych (służących do tworzenia liter narodowych) tworzenia na ekranie i w wydruku prymitywnej grafiki zwanej semigrafiką Aby zmniejszyć bałagan IBM wprowadziła tzw. strony kodowe. Ich numeracja uwzględniała też wersje rozszerzeń kodu ASCII proponowane przez innych producentów. Strony kodowe obejmują: zestaw rozszerzonych znaków ASCII ze znakami narodowymi informację o narodowym sposobie zapisu waluty, daty i czasu oraz separatorów dziesiętnych i tysięcznych klawiaturę narodową 27
Międzynarodowa Organizacja Normalizacyjna ISO zatwierdziła zestaw swoich stron kodowych. Normy te są znane pod nazwą ISO-8859-x, gdzie x jest cyfrą od 1 do 16 ISO 8859-1 (Latin-1) - alfabet łaciński dla Europy zachodniej ISO 8859-2 (Latin-2) - łaciński dla Europy środkowej i wschodniej ISO 8859-3 (Latin-3) - łaciński dla Europy południowej ISO 8859-4 (Latin-4) - łaciński dla Europy północnej ISO 8859-5 (Cyrillic) - dla cyrylicy ISO 8859-6 (Arabic) - dla alfabetu arabskiego ISO 8859-7 (Greek) - dla alfabetu greckiego ISO 8859-8 (Hebrew) - dla alfabetu hebrajskiego, itd 28
w Windows występuje odmiana kodów ASCII zwana ANSI (American National Standards Institute) Różnice polegają na braku w zakresie rozszerzonym ANSI znaków semigraficznych i sterujących drukarką (w Windows zbędne), oraz innym umieszczeniu znaków narodowych. strona kodowa polskich liter to ANSI 1250 29
Unicode wykorzystuje 2 a nawet 4 bajty na znak to standard kodowania komputerowego, reprezentacji i przygotowania tekstu używany w większości światowych systemów pisma. Rozwijany jest przez konsorcjum, w którego skład wchodzą ważne firmy komputerowe, producenci oprogramowania, instytuty naukowe, agencje międzynarodowe oraz grupy zainteresowanych użytkowników. Konsorcjum współpracuje z organizacją ISO. Ponad 128 237 znaków w 135 językach skryptowych 30
Historia standardu 1991 Unicode 1.0 1993 Unicode 1.1 1996 Unicode 2.0 1998 Unicode 2.1 1999 Unicode 3.0 2001 Unicode 3.1 2002 Unicode 3.2 2003 Unicode 4.0 2005 Unicode 4.1 (marzec) 2006 Unicode 5.0 (lipiec) 2010 Unicode 6.0 (październik) 2012 Unicode 6.1 (styczeń) 2012 Unicode 6.2 (wrzesień) 2013 Unicode 6.3 (wrzesień) 2014 Unicode 7.0 (czerwiec) 2015 Unicode 8.0 (czerwiec) 2016 Unicode 9.0 (czerwiec) 31
W standardzie Unicode mamy 17 poziomów (ang. planes) oznaczanych cyframi od 0 do 16 Każdy poziom obejmuje 2 16 kolejnych pozycji kodowych Poziom 0 zwany Basic Multilingual Plane (BMP) zawiera znaki używane w niemal wszystkich językach nowożytnych oraz dużą liczbę symboli Poziomy 1 do 16 noszą nazwę poziomów uzupełniających Zatem liczba pozycji kodowych dostępnych w standardzie Unicode jest równa 17 * 2 16 = 1 114 112 Jak dotąd zagospodarowano jedynie 24% pozycji kodowych a 11% zostało przeznaczone na kodowanie znaków 32
Mapa BMP (Basic Multilingual Plane) Każdy numerowany obszar reprezentuje 256 pozycji kodowych 33
Podstawowy łaciński Dodatek Latin-1 Rozszerzony łaciński A Rozszerzony łaciński B Rozszerzenia IPA Oddzielone litery modyfikujące Składające znaki diakrytyczne Grecki i koptyjski Cyrylica Uzupełnienie cyrylicy Ormiański Hebrajski Arabski Syryjski Thaana Dewanagari Bengalski, itd. 34
Polskie znaki w Unicode [ rozszerzony łaciński A, dodatek Latin 1] ą 261 ć 263 ę 281 ł 322 ń 324 ó 243 ś 347 ź 378 ż 380 Ą 260 Ć 262 Ę 280 Ł 321 Ń 323 Ó 211 Ś 346 Ź 377 Ż 379 35
Kodowanie polskich znaków narodowych w różnych standardach: Skąd wynikają błędy wyświetlania polskich znaków? Litera Windows ISO Latin 2 Unicode ą 185 177 261 ć 230 230 263 ę 234 234 281 ł 179 179 322 ń 241 241 324 ś 156 182 347 ź 159 188 378 ż 191 191 380 Ą 165 161 260 itd. 36