3. Reprezentacje znaków w komputerze 3.1. Liczby Kodowanie liczb opiera się na ich konwersji na system binarny. Nie mniej trzeba jeszcze pamiętać, że dana liczba zajmuje z góry określoną liczbę bitów oraz określić jak zapisać liczby ujemne i ułamki. 3.1.1. Liczby naturalne. Kodowanie liczby naturalnej na n-bitach polega na zapisie liczby w systemie (2) i uzupełnieniu jej od lewej strony zerami do n pozycji. Np. Liczba 26=11010(2) na 8 bitach: 0 0 0 1 1 0 1 0 3.1.2. Liczby całkowite. Kod ZM (kod znak-moduł) Wszystkie bity poza najstarszym mają takie samo znaczenie jak w naturalnym kodzie binarnym. W kodzie ZM najstarszy bit jest bitem znaku. Jeżeli ma on wartość 0 to dana liczba jest dodatnia, jeżeli 1 to liczba jest ujemna. W związku z tym występują dwie reprezentacje zera. Kłopotliwe jest wykonywanie działań w ZM 26 0 0 0 1 1 0 1 0 -26 1 0 0 1 1 0 1 0 Kod U2 (kod uzupełnień do 2) Kodowanie U2 jest obecnie najpopularniejszą reprezentacją liczb całkowitych (oraz ułamkowych przedstawionych w formacie stałoprzecinkowym). Operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. Z tego też powodu oszczędza się na kodach rozkazów procesora. Liczba dodatnia całkowita jest zapisana tak samo jak w ZM. W kodzie U2 najstarszy bit n-bitowej reprezentacji ma wagę -2n-1, a pozostałe tradycyjnie kolejno +2n-2, +2n-3,…. Algorytm zapisu liczby ujemnej w kodzie U2: 1. Zapisz liczbę przeciwną do danej tak jak w ZM. 2. Dokonaj inwersji bitów (czyli pozamieniaj 0 na 1 i odwrotnie:); 3. Zwiększ wynik o 1. Np. Liczba -27 na 8 bitach w U2: 0 0 0 1 1 0 1 1 1. Zapisujemy liczbę 27 na 8bitach 1 1 1 0 0 1 0 0 2. Zamieniamy bity 1 1 1 0 0 1 0 1 3. Dodajemy 1 i mamy -27 w U2 Natomiast 10101001U2 = -27+(25+23+1) = -128+41 = -87 3.1.3. Liczby rzeczywiste. Zapis stałopozycyjny. Do zapisu liczby stałoprzecinkowej przeznaczona jest z góry określona ilość bitów, a pozycję przecinka ustala się arbitralnie, w zależności od wymaganej dokładności, wolne bity uzupełniając zerami. Do reprezentacji liczb ze znakiem stosuje się najczęściej kod U2. Np. Liczba 6,25=110,01(2) zapisana na 8 bitach gdy część ułamkowa zajmuje 3 najmłodsze bity, ma postać: 0 0 1 1 0 0 część całkowita 1 0 część ułamkowa Natomiast liczba -6,25=-110,01(2) zapisana w powyższym formacie w kodzie U2, ma postać: 1 1 0 0 1 1 1 0 str. 6 Zapis zmiennopozycyjny. Liczba zmiennoprzecinkowa jest komputerową reprezentacją liczb rzeczywistych zapisanych w postaci wykładniczej o podstawie 2. Na zajęciach będziemy stosowali następującą notację: z M 2C S gdzie: z M C-S C S - znak liczby znormalizowana mantysa (liczba ułamkowa spełniająca warunek: 1 M<2) wykładnik (liczba całkowita) spolaryzowana cecha (liczba całkowita umownie zwana cechą) stała (liczba całkowita BIAS zależna od danej implementacji – rozwiązuje problem znaku wykładnika) Uwaga: Powszechnie w procesorach i oprogramowaniu obliczeniowym wykorzystuje się binarny zapis zmiennopozycyjnym zgodnym ze standardem IEEE754 (np. format 32-bitowy z polami: b31-znak, b23..30-cecha, b0..22-mantysa). W przedstawieniu tym cecha, która jest ciągiem zer (albo ciągiem jedynek) nadaje kodowi specjalne znaczenie, np. 01111111100000000000000000000000 + 00000000000000000000000000000000 0 Gdy cecha jest ciągiem zer mantysa jest zdenormalizowana tzn. 0,5 M<1 Ze względów dydaktycznych będziemy stosowali uproszczone formaty. Używając formatu zmiennopozycyjnego należy pamiętać o takich zagadnieniach jak: zakres (problem z przepełnieniem i niedomiarem), zaokrąglanie, kolejność wykonywania działań (nie ma np. łączności) Liczbę, którą można dokładnie zapisać w danym formacie nazywamy liczbą maszynową. Np. Załóżmy, że operujemy następującym zmiennopozycyjnym formatem zapisu liczby rzeczywistej: na zapis przeznaczamy 16 bitów. najstarszy bit (b15) to bit znaku (będziemy stosować kod ZM), kolejne 6 bitów (b9-b14) to mantysa pozostałe bity (b0-b8) są przeznaczone na zapis cechy. przyjmijmy, że S=9. Przedstawimy liczbę +0,0224609375 w powyższym formacie. Naszą liczbę zapisujemy w systemie binarnym w postaci wykładniczej o podstawie 2: 0,0224609375 = 0,0000010111(2) = 1,0111(2) 2-6 = 1,0111(2) 23-9 = +1,0111(2) 211 -S (2) Oto liczba 0,0224609375 zapisana w zadanym formacie: 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 3.2. Kontrola transmisji danych Bit parzystości Suma kontrolna CRC http://wazniak.mimuw.edu.pl/index.php?title=MN03 str. 7 Zadania z.3.1. Uzupełnij tabelkę (do zapisu liczb w kodzie ZM i U2 użyj minimalnej wielokrotności 8 bitów) : (10) 1947 -1947 ZM U2 01001110 11001110 01001101 11001101 z.3.2. Podaj zakres liczb całkowitych jakie można zapisać na 8 bitach: a) w kodzie ZM b) w kodzie U2 z.3.3. Uzasadnij, że liczba -1 w kodzie U2 jest reprezentowana zawsze jako ciąg jedynek. z.3.4. Rozkoduj ciąg 10010001 zapisany w formacie stałopozycyjnym 8bitowym: a) b0..5 – część całkowita, b6..7 – część ułamkowa (bez znaku) b) b0..2 – część ułamkowa, b3..7 – część całkowita (bez znaku) c) b0..2 – część ułamkowa, b3..6 – część całkowita, b7-znak (ZM) d) b0..2 – część ułamkowa, b3..7 – część całkowita (U2) z.3.5. Zapisz liczbę -112,09375 w 16bitowym formacie stałopozycyjnym: a) b0..7 – część ułamkowa, b8..14 – część całkowita, b15-znak (ZM) b) b0..7 – część ułamkowa, b8..15 – część całkowita (U2) z.3.6. Podaj zakres i dokładność liczb jakie można zapisać w formacie stałopozycyjnym 8bitowym (bez znaku): a) gdy część ułamkowa zajmuje 2 najmłodsze bity b) gdy część ułamkowa zajmuje 5 najstarszych bitów z.3.7. Zapisz w 16 bitowym formacie zmiennopozycyjnym: b15-znak, b14..7-znormalizowana mantysa, b6..0 spolaryzowana cecha przy S=20: a) 9,1875 c) 503 b) 0,09375 d) -9,09375 z.3.8. Rozkoduj ciąg 10010001 zapisany w formacie zmiennopozycyjnym 8bitowym: a) b7-znak, b6..3-znormalizowana mantysa, b0..2 spolaryzowana cecha przy S=8 b) b7-znak, b6..3-znormalizowana mantysa, b0..2 spolaryzowana cecha przy S=10 c) b0-znak, b7..4-znormalizowana mantysa, b1..3 spolaryzowana cecha przy S=10 d) b0-znak, b1..3-znormalizowana mantysa, b4..7 spolaryzowana cecha przy S=10 z.3.9. Podaj zakres jaki uzyskamy kodując liczby w formacie zmiennopozycyjnym 8 bitowym: b7-znak, b6..3znormalizowana mantysa, b0..2-spolaryzowana cecha przy S=8. z.3.10. Wypisz i zaznacz na osi wszystkie liczby jakie można zakodować na 4 bitach w formacie zmiennopozycyjnym gdy najstarszy bit jest bitem znaku, dwa następne bity są bitami spolaryzowanej cechy o stałej S=1, a najmłodszy bit jest bitem znormalizowanej mantysy. z.3.11. Określ, która z liczb jest liczbą maszynową, która z przepełnienia a która z niedomiaru gdy zapisane są w formacie „zccmm” i są zapisane bez zastrzeżenia o cechach będących ciągiem jedynek i denormalizacji mantysy: a) 2 c) -20 b) 0,2 d) -2,2 z.3.12. Dane słowa 8bitowe mają dodaną odpowiednią sumę kontrolną. Określ, które uległy zniekształceniu a) 110111011 c) 01011101011 b) 0101110111 d) 0101110100 str. 8