1. Reprezentacja danych w komputerze 1.1 Sekwencje bitów W komputerze dane reprezentowane s przez sekwencje bitów cyfry liczbowego systemu binarnego. Te sekwencje bitów interpretowane s w terminach wewntrznych typów danych (liczby lub znaki tekstu). 1) Wewntrzne typy danych Typ danych wyznaczony jest przez 2 schematy definicyjne: - dziedzina (zbiór moliwych wartoci) (w komputerze skoczony zbiór); - operacje (które mona wykona na elementach zbioru wartoci). W. Kasprzak: WDI 1-1
Wewntrzne typy danych w komputerze to: - całkowity, ułamkowy (zmienno-przecinkowy), znakowy. Liczby całkowite nale do skoczonego pod-zbioru matematycznego zbioru liczb całkowitych wszystkie operacje na takich danych daj wyniki dokładne (za wyjtkiem przypadku nadmiaru). Róne notacje liczb całkowitych: znak-moduł, U2, U1. Ułamki tworz skoczony podzbiór zbioru liczb rzeczywistych. Operacje na tych liczbach nie zawsze daj wyniki dokładne błdy zaokrglenia (z powodu nadmiaru lub niedomiaru braku precyzji reprezentacji). Ułamki reprezentowane s w postaci zmiennego przecinka. Znaki s skoczonym podzbiorem zbioru liczb całkowitych. W. Kasprzak: WDI 1-2
Liczby rzeczywiste (w matematyce) : - nieskoczony zbiór od - do + ; - nieprzeliczalnie wiele liczb rzeczywistych; - s gsto rozmieszczone na osi liczbowej pomidzy 2 rónymi liczbami rzeczywistymi znajduje si nieskoczenie wiele innych liczb. Ułamki (w komputerze): - istnieje najmniejsza (1) i najwiksza (2) ujemna liczba, i najmniejsza (3) i najwiksza (4) dodatnia liczba i zero (0); - jest ich skoczenie wiele; - nie le ciasno"; midzy 2 liczbami ułamkowymi znajduje si tylko skoczenie wiele innych. W. Kasprzak: WDI 1-3
2) Systemy liczbowe System liczbowy - ogół zasad umoliwiajcych przedstawienie liczb za pomoc umownych znaków. Cyfry - znaki, za pomoc których zapisuje si liczby. Rozróniamy: systemy pozycyjne i systemy nie-pozycyjne. Pozycyjny system liczbowy - znaczenie cyfry jest zalene od miejsca (pozycji), które ona zajmuje w liczbie. Nie-pozycyjny system liczbowy - znaczenie cyfry jest niezalene od miejsca połoenia w liczbie. Przykład 1.1. Pozycyjny system liczbowy to np. powszechnie stosowany system dziesitny. Np. liczba 777 zawiera trzy jednakowe cyfry: 7; kada z nich ma jednak inne znaczenie prawa cyfra zwizana jest z wielkoci 1 (10 0 ), nastpna z lewej z 10 (10 1 ) a kolejna z 100 (10 2 ) itd. W. Kasprzak: WDI 1-4
Nie-pozycyjny system liczbowy to np. system rzymski, którego zasadniczymi znakami s: I = l, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000. Ich interpretacja nie zaley od miejsca w liczbie (cho moe zalee od wzgldnego połoenia wzajemnego, np. IX, XI). 3) Typowe pozycyjne systemy liczbowe Kod binarny - system dwójkowy Podstawa = 2; a i {0, 1}; Liczba n 1 = i= 0 2 i a i ; Liczba 0, 2 n 1 Kod ósemkowy (system oktalny) Podstawa = 8; a i {0, 1, 2, 3, 4, 5, 6, 7}, Liczba n 1 = i= 0 8 i a i ; Liczba 0, 8 n 1 W. Kasprzak: WDI 1-5
Kody dziesitne system dziesitny (decymalny) Podstawa = 10 ; a i {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, Kody szesnastkowe (system heksadecymalny) Podstawa = 16 ; a i {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}, Przykład 1.2. Liczby dziesitne 0, 1, 7, 8, 14, 15 kodowane w systemach: dwójkowym, ósemkowym i szesnastkowym. Liczby w systemie dziesitnym dwójkowym ósemkowym szesnastkowym 0 0000 00 0 1 0001 01 1 7 0111 07 7 8 1000 10 8 14 1110 16 E 15 1111 17 F W. Kasprzak: WDI 1-6
4) System dziesitny kodowany dwójkowo (BCD) W tym systemie tylko cyfry dziesitne s podane w kodzie dwójkowym. Z kodów cyfr składany jest kod liczby (kod dwójkowo-dziesitny). Przykład 1.3. Kilka 4-bitowych kodów dwójkowo-dziesitnych. Kademu bitowi k i przypisana jest okrelona waga (składnik moe by zanegowany). Kody BCD Cyfra dziesitna 8421 2421 84(-2)(-1) 5421 0 0000 0000 0000 0000 1 0001 0001 0111 0001 2 0010 0010 0110 0010 3 0011 0011 0101 0011 4 0100 0100 0100 0100 W. Kasprzak: WDI 1-7
5 0101 1011 1011 1000 6 0110 1100 1010 1001 7 0111 1101 1001 1010 8 1000 1110 1000 1011 9 1001 1111 1111 1100 Zadanie domowe 1.4. Przedstawi liczb dziesitn A = 197 w systemie dziesitnym kodowanym dwójkowo, w kodach (8421), (2421), (84-2-1), (5421): W. Kasprzak: WDI 1-8
5) Reprezentacja binarna w komputerze Znak binarny jest to zmienna przyjmujca tylko dwie wartoci, umownie oznaczone 0 i 1, a nazywane bitami. Wektor znaków binarnych: - 1 elementowy bit - 4 elementowy połowa bajtu - 8 elementowy bajt - 16 elementowy słowo 16 bitowe - 32 elementowy słowo 32 bitowe, itd. Słowo wektor informacji cyfrowej przesyłany midzy pamici operacyjn komputera w jednej operacji czytania lub pisania. Blok wielko wektora informacji cyfrowej, któr mona przesła w ramach operacji zapisu lub odczytu informacji zewntrznej. W. Kasprzak: WDI 1-9
1.2 Kody znakowe (alfanumeryczne) Na kod znakowy (alfanumeryczny) składaj si 2 schematy: - Tablica wartoci znaków - odwzorowanie znaków pisarskich (litery, cyfry, znaki przestankowe, sterujce i inne) na liczby całkowite. - Binarny kod wartoci znaku - reprezentacja liczba całkowitej odpowiadajcej znakowi w postaci 1 bajtu lub sekwencji bajtów. 1) Kod ASCII (American Standard Code for Information Interchange) / ISO 646 8-bitowy kod, w którym słowo informacyjne obejmuje 7 bitów a jeden bit (ósmy) jest bitem kontrolnym - bitem parzystoci. Binarna posta kodu znaku - reprezentacja 128 liczb (kody od 0 do 127) w postaci 1 bajtu. W. Kasprzak: WDI 1-10
Tablica wartoci znaków ASCII 0 31 kody sterujce; 32 47 znaki pomocnicze (,!,+,-,...); 48 57 - cyfry 0 9; 58 64 znaki pomocnicze (:,;,>,=,<,?,@); 65 90 91 96 znaki specjalne; A, B,..., Z; 97 122 123 126 znaki specjalne; a, b,..., z; 127 - DEL. Np. Znak C --> warto dziesitna 67 --> zakodowana w NB 100 0011 i poprzedzona bitem kontrolnym 0 --> ostateczny kod 0 100 0011. W. Kasprzak: WDI 1-11
Binarne kody wartoci znaków W. Kasprzak: WDI 1-12
2) Kod ISO 8859-1 ("Latin-1 Pełne 8 bitów kodu stanowi bity informacyjne. Reprezentacja kodu znakowego w postaci 1 bajtu. Bit MSB (najbardziej znaczcy) dla znaków ASCII wynosi 0 w kodzie ISO8859, a nowe znaki posiadaj MSB równy 1. 3) Unikod ("Unicode") implementacja standardu ISO/IEC 10646. Standard ISO/IEC 10646 definiuje uniwersalny zbiór znaków (UCS - universal character set) bdcy nadzbiorem wszystkich standardowych zbiorów znaków. W. Kasprzak: WDI 1-13
Tablica wartoci w ISO 10646 to 31-bitowy zakres znaków: Standard ISO 10646-1 (z 1993 r.) definiuje m.in. zawarto zbioru BMP - pocztkowy podzakres 16-bitowy obejmujcy 65534 słów kodowych (kody od 0x0000 do 0xFFFD) zwany jest "Basic Multilingual Plane" (BMP); - od 0x0000 do 0x007F - identyczny ze zbiorem ASCII ; - od 0x0000 do 0x00FF - identyczny z ISO 8859-1 ("Latin-1"). Od 0xE000 do 0xF8FF (w BMP) i wykraczajce poza BMP zostały zarezerwowane na przyszło. Cz ISO 10646-2 (dodana w 2001 r.) definiuje kody znaków lecych poza BMP. Kody powyej 16-bitowego BMP przeznaczone s dla specjalistycznych zastosowa, np. staroytnych alfabetów czy notacji naukowych. W. Kasprzak: WDI 1-14
Binarna reprezentacja wartoci znaków Unikodu Schematy UCS-2 i UCS-4 Podstawowe schematy binarnej reprezentacji znaków Unikodu to sekwencje w kodzie NB o 2 lub 4 bajtach (schematy UCS-2 i UCS-4). UCS-4 moe reprezentowa wszystkie znaki Unikodu, podczas gdy UCS-2 - tylko te z zakresu BMP. Jednak zastosowanie UCS-2 (lub UCS-4) w systemie Unix prowadziłoby do istotnych problemów, jako, e wikszo programów w tym systemie oczekuje plików ASCII i nie moe czyta 16(32)-bitowej reprezentacji znaku. Dlatego UCS definiuje te inny sposób odwzorowania kodów znaków na posta sekwencji bajtów - okrelany jako schemat UTF-8. W. Kasprzak: WDI 1-15
Kodowanie UTF-8 (UCS Transformation Format) znaki UCS od U+0000 do U+007F (znaki ASCII) s kodowane w postaci bajtów od 0x00 do 0x7F (zgodne z ASCII); znaki UCS o kodach > U+007F s kodowane przez sekwencj kilku bajtów z bitem najbardziej znaczcym równym 1, co zabezpiecza przed pojedyncz ich interpretacj jako bajtu ASCII; pierwszy bajt takiej sekwencji nie-ascii jest z zakresu od 0xC0 do 0xFD i podaje ilo bajtów nastpnych bajtów kodujcych dany znak; pozostałe bajty tej sekwencji s z zakresu od 0x80 do 0xBF. bajty 0xFE i 0xFF nie s uywane w kodowaniu UTF-8. W. Kasprzak: WDI 1-16
Sekwencje w UTF-8 zalenie od wartoci znaku w Unikodzie: Wartoci w Unikodzie Sekwencje kodujce w UTF-8 U+00000000 - U+0000007F 0xxxxxxx U+00000080 - U+000007FF 110xxxxx 10xxxxxx U+00000800 - U+0000FFFF 1110xxxx 10xxxxxx 10xxxxxx U+00010000 - U+001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx U+00200000 - U+03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx U+04000000 - U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Pozycje bitowe oznaczone jako xxx s wypełniane binarn reprezentacj kodu znaku, przy czym prawa pozycja x zawiera najmniej znaczcy bit. Liczba jedynek w 1-szym bajcie sekwencji wyznacza liczb bajtów sekwencji. W. Kasprzak: WDI 1-17
Długo sekwencji kodujcej musi by minimalna - liczba nie moe by kodowana w postaci dłuszej sekwencji ni to jest konieczne. Uwaga: Implementacja UTF-8 w Unikodzie ogranicza sekwencj kodujc do 4 bajtów, gdy zakłada si praktyczn uyteczno 21 bitów reprezentacji. Przykład 1.16. Znak w Unikodzie U+00A9 = 1010 1001 (znak "copyright") zostaje zakodowany w UTF-8 jako: 11000010 10101001 = 0xC2 0xA9 a znak U+2260 = 0010 0010 0110 0000 (znak " nierówne") jest kodowany: 11100010 10001001 10100000 = 0xE2 0x89 0xA0 W. Kasprzak: WDI 1-18
1.3 Wewntrzna reprezentacja liczb 1) Kodowanie liczb nieujemnych Wykorzystuje si pozycyjne systemy liczbowe o dodatniej podstawie. Zapis pozycyjny o podstawie r: Podstawa pozycyjnego systemu liczbowego - ilo cyfr wykorzystywanych do przedstawienia liczb w tym systemie. Kod NB ( natural binary ) - zapis pozycyjny o podstawie 2: W. Kasprzak: WDI 1-19
Przykład 1.6 Przekształcanie liczb dziesitnych na dwójkowe (NB): dzieli przez 2, zapisywa reszt z dzielenia, na koniec - przewróci kolumn reszt w prawo. Dodawanie dwóch liczb NB: W. Kasprzak: WDI 1-20
2) Liczby ze znakiem - liczby całkowite dodatnie i ujemne Znaki liczb okrelane s przez jedn z cyfr, w okrelonym miejscu rozwinicia, zwykle najbardziej znaczc. Na ogól przyjmuje ona wartoci: 0 - dla liczb dodatnich, 1 - dla liczb ujemnych. Znak- moduł(zapis modułowy) Dla Dla a a n n = 0 : Liczba = 1: Liczba Znak Modul Znak Modul = = n 1 i= 0 n 1 i= 0 Rozrónia si tu dwa rodzaje zera. Nie stosuje si w przypadku działa arytmetycznych. a a i i 2 2 i i W. Kasprzak: WDI 1-21
Kod uzupełnieniowy do 2 (kod U2) : Najpowszechniej stosowana notacja liczb całkowitych w komputerach doby obecnej. Najbardziej znaczcy bit jest bitem znaku posiada wag ujemn -2 n, gdzie (n+1) jest liczb bitów reprezentacji: Przykład 1.7 Liczba U n 1 n 2 = 2 + i n n a n ai 2 2, 2 1. i= 0 W. Kasprzak: WDI 1-22
Negacja (zmiana znaku) liczb w U2. Obliczenie liczby w U2 o przeciwnym znaku uzupełnienie bitowe i dodanie 1: L U 2 = ( a n, an 1,..., a1, a0 ); LU 2 = ( an, an 1,..., a1, a0 ) + 1. (Uzupełnienie to zmiana wszystkich 0 na 1 i 1 na 0). Istnieje w U2 dogodny zwizek pomidzy 2 liczbami o tej samej wartoci bezwzgldnej s identyczne, jeli czytane od prawej do lewej strony do pierwszej 1, a od tego miejsca s swoimi uzupełnieniami. Przykład 1.8 6 U2 = 0110 --> 01 10-6 U2 = 1010 -> 10 10 Prowadzi to do prostego algorytmu negacji: kopiuj liczb od prawej do lewej włcznie z pierwsza 1, odtd uzupełniaj bity. W. Kasprzak: WDI 1-23
Dodawanie liczb w U2 Tu pojawia si główna zaleta reprezentacji U2: dla dodawania liczb o dowolnym znaku moemy stosowa ten sam algorytm. Przykład 1.9 3 0011 + 2 --> +0010 0101 --> 5-3 1101 + -2 --> +1110 1011 --> -5 7 0111 + -5 --> +1011 0010 --> 2 W. Kasprzak: WDI 1-24
Dla dodawania w U2 stosujemy ten sam algorytm co dla kodu NB, tylko, e wynik jest zawsze tej samej długoci co argumenty dodatkowo pojawiajce si przeniesienie zostaje obcite. Przykład 1.10. Pominicie ostatniego przeniesienia nie wpływa na poprawno czy błd wyniku dodawania liczb w U2: OK! OK! Wniosek: W U2 musimy zna jedynie operacje dodawania i negacji, nie jest potrzebna operacja odejmowania. Np. odejmowanie 7-5 jest równowane dodawaniu 7 + (-5). W. Kasprzak: WDI 1-25
Problem nadmiaru ( overflow ) Błd nadmiaru (overflow) wystpi wtedy, gdy wynik operacji przekroczy zakres reprezentacji liczb. Przykład 1.11. Nadmiar podczas dodawania w U2 nie zaley od ostatniego przeniesienia a jedynie od tego, czy wynik posiada inny znak ni znak obu argumentów: Podczas dodawania w U2 wykrywamy wystpienie sytuacji nadmiaru poprzez sprawdzenie bitu znaku wyniku: W. Kasprzak: WDI 1-26
nadmiar wystpi wtedy, gdy dodawanie 2 liczb dodatnich da wynik ujemny, lub gdy dodawanie 2 liczb ujemnych da wynik dodatni; przy dodawaniu liczb dodatniej i ujemnej nadmiar nie moe wystpi. W. Kasprzak: WDI 1-27
Kod uzupełnieniowy do 1 (kod U1): Liczba U n 1 n 1 = (2 1) + i n n a n ai 2 (2 1), 2 1. i= 0 Najbardziej znaczcy bit jest bitem znaku - jego waga jest -(2 n - 1), gdzie (n+1) jest liczb bitów reprezentacji. Przykład 1.12 W U1 łatwo jest uzyska liczb przeciwn - przez negacj bitów: L U1 = a ( a n, an 1,..., a1, a0); LU 1 = ( an, an 1,..., a1, 0) W. Kasprzak: WDI 1-28.
1.5 Liczby ułamkowe 1) Reprezentacja liczb mieszanych - ułamkowych Zapis pozycyjny liczb mieszanych ułamkowych: - pozycyjny system liczbowy o dodatniej podstawie p {2, 3,...}; - (n + m) - nieujemna liczba pozycji. L = a n 1 1 0 1 n 1 p +... + a1 p + a0 p + a 1 p +... Liczba L kodowana jest w postaci : (L) p W. Kasprzak: WDI 1-29 + a m = ( an 1,..., a1, a0, a 1... a m ) p = przy czym: a i - cyfra i-tej pozycji, a i {0, 1,..., p-1}; n - ilo cyfr czci całkowitej liczby A; m - ilo cyfr czci ułamkowej A. Jeli m i n s jednoczenie niezerowe to L jest liczb mieszan. p m ( C L = U n 1 i= m L ) a i p p i
2) Reprezentacja wykładnicza (zmienno-przecinkowa) Przykład 1.13 Załómy, e słowo maszyny ma długo 64 bitów. Umoliwia to reprezentacj liczb całkowitych z zakresu od 0 do 2 63-1 10 19. 1) Jednak w wielu dziedzinach (np. w astronomii) spotykamy znacznie wiksze wartoci. 2) Dla duych liczb nie stosujemy te zwykle zapisu w rodzaju: N = 602 000 000 000 000 000 000 000 tylko posta wykładnicz zapisu, np.: N = 6,02 10 23 W. Kasprzak: WDI 1-30
Zmienny przecinek Liczby s kodowane w jednym słowie maszyny podzielonym na trzy czci: znak liczby (zwykle 1 bit) jedna cz (zwykle znacznie dłusza) zawiera kod mantysy liczby i jej znak, druga cz (kilkubitowa) - kod cechy liczby i jej znak. x = [ znak] mantysa 2 W. Kasprzak: WDI 1-31 cecha Reprezentacja jest znormalizowana, tzn. bity mantysy s przesunite tak, aby pierwsze miejsce po przecinku zajmował pierwszy znak 1 cigu mantysy. ( 0.5) 10 mantysa < 1 Błd zaokrglenia wystpi wtedy, gdy cz wartoci liczby zostaje utracona w wyniku braku wystarczajcej długoci mantysy.