Wstep do Informatyki
Transkrypt
Wstep do Informatyki
Wstep ˛ do Informatyki dr hab. Bożena Woźna-Szcześniak, prof. AJD [email protected] Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 1 / 31 DZIELENIE LICZB BINARNYCH Dzielenie można przeprowadzić wykorzystujac ˛ nastepuj ˛ ace ˛ metody: metoda porównawcza, metoda nierestytucyjna, metoda restytucyjna. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 2 / 31 DZIELENIE LICZB BINARNYCH - metoda porównawcza Metoda porównawcza jest stosowana w zapisie znak moduł (ZM) i gdy jest spełniony warunek A < B, gdzie: A - dzielna, B - dzielnik. Niech: r0 - reszta poczatkowa ˛ Rn = rn · 2−n - reszta z dzielenia rn - n-ta reszta cz˛eściowa Q - iloraz uzyskany w algorytmie o bitach qi . Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 3 / 31 DZIELENIE LICZB BINARNYCH - metoda porównawcza Polega na porównywaniu dzielnika z n–ta˛ reszta. ˛ 1.Jeżeli przesunieta ˛ reszta cz˛eściowa jest wieksza ˛ lub równa od dzielnika (r >= B), to: – kolejny bit ilorazu qi ustawiamy na 1 (tj. qi = 1), – odejmujemy dzielnik od tej reszty. 2.Jeżeli przesunieta ˛ reszta cz˛eściowa jest mniejsza od dzielnika (r < B), to kolejny bit ilorazu qi = 0. 3.Dokonujemy przesuniecia ˛ otrzymanego wyniku o jedno miejsce w lewo i przechodzimy do punktu pierwszego. Wynikiem dzielenia jest iloraz Q o bitach q0 q1 ...qi . W pierwszym kroku porównujemy reszte˛ poczatkow ˛ a˛ r0 (tzn. A zapisana˛ na tylu pozycjach co B) z dzielnikiem. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 4 / 31 METODA PORÓWNAWCZA – przykład 1 Podzielić A=− 25 = 1.0011001(ZM) 128 przez B= 5 = 0.0101(ZM) . 16 Warunek A < B jest spełniony. Porównujemy kolejne reszty cz˛eściowe z modułem dzielnika. Oczekiwany wynik: − 25 5 25 16 5 : =− · = − = 1.101(ZM) 128 16 128 5 8 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 5 / 31 METODA PORÓWNAWCZA – przykład 1 ⇐ r0 .0011001 r1 .011001 r1 − B r1 > B q1 = 1 .011001 − ⇐ ⇐ B = 0.0101(ZM) .010100 Bit znaku: .000101 r2 .00101 r2 < B .00101 r3 .0101 r3 = B r3 − B − A = 1.0011001(ZM) q0 = a0 ⊕ b0 q2 = 0 q0 = 1 q3 = 1 .0101 Q = q0 .q1 q2 q3 .0101 A = 1.101 B .0000 r4 .0000 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 6 / 31 METODA PORÓWNAWCZA – przykład 2 Podzielić A=− 3 = 1.0000011(ZM) 128 przez B= 9 = 0.1001(ZM) . 16 Warunek A < B jest spełniony. Porównujemy kolejne reszty cz˛eściowe z modułem dzielnika. Oczekiwany wynik: − 3 9 3 16 1 : =− · =− ≈ 1.00001(ZM) 128 16 128 9 24 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 7 / 31 METODA PORÓWNAWCZA – przykład 2 ⇐ r0 .0000011 r1 .0000110 r1 < B ⇐ q1 = 0 r2 q2 = 0 r3 r4 r5 r5 ≥ B ⇐ q0 = a0 ⊕ b0 q3 = 0 q0 = 1 .0110000 r4 < B ⇐ Bit znaku: .0011000 r3 < B ⇐ B = 0.1001(ZM) .0001100 r2 < B ⇐ A = 1.0000011(ZM) q4 = 0 Q = q0 .q1 q2 q3 q4 q5 q5 = 1 A = 1.00001 B .1100000 r5 − B − = .11000 .10010 .00110 r6 .0110 Bożena Woźna-Szcześniak (AJD) Reszta : 0.011 · 2−6 Wstep ˛ do Informatyki Wykład 4 8 / 31 METODA NIERESTYTUCYJNA Jest to metoda dzielenia dwóch liczb zapisanych w kodzie U2. Aby można było ja˛ zastosować, moduł dzielnej musi być mniejszy od modułu dzielnika (|A| < |B|) 1. Metoda ta polega na badaniu znaku dzielnika i kolejnej reszty cz˛eściowej. Pierwsza reszta cz˛eściowa jest równa dzielnej. Jeżeli znaki sa˛ zgodne to odejmujemy dzielnik od przesunietej ˛ w lewo kolejnej reszty cz˛eściowej; kolejny bit ilorazu qi = 1. Jeżeli znaki sa˛ różne to dodajemy dzielnik do przesunietej ˛ w lewo kolejnej reszty cz˛eściowej; kolejny bit ilorazu qi = 0. 2. Powtarzamy punkt 1, aż do momentu, gdy kolejna reszta cz˛eściowa bedzie ˛ równa 0. 3. Do otrzymanego wyniku dodajemy poprawk˛e równa: ˛ −1 + 2−n , gdzie n oznacza n–ta˛ reszte˛ z dzielenia. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 9 / 31 METODA NIERESTYTUCYJNA - przykład 1 Podziel A przez B, gdzie A=− 15 = 1.1110001(U2) 128 3 = 0.011(U2) 8 Warunek |A| < |B| jest spełniony. B= Oczekiwany wynik: − Bożena Woźna-Szcześniak (AJD) 15 3 15 8 5 : =− · =− 128 8 128 3 16 Wstep ˛ do Informatyki Wykład 4 10 / 31 METODA NIERESTYTUCYJNA – przykład 1 ⇐ r0 B(+); r1 (−) ⇐ r2 B(+); r3 (+) ⇐ r4 B(+); r5 (−) ⇐ r6 B(+); r7 (+) r0 r1 r2 r3 r4 r5 r6 r7 r8 1.1110001 1.110001 r1 + B 1.110001 + 0.011000 0.001001 0.01001 r3 − B 0.01001 + 1.10100 1.11101 1.1101 r5 + B 1.1101 + 0.0110 0.0011 0.011 r7 − B 0.011 − 0.011 0.000 Bożena Woźna-Szcześniak (AJD) A = 1.1110001(U2) B = 0.0011(U2) q1 = 0 Bit znaku: q1 = 0 q2 = 1 q3 = 0 q4 = 1 Wstep ˛ do Informatyki Pseudo iloraz: Q = q1 .q2 q3 q4 = = 0.101(U2) Poprawka: −1 + 2−4 = − 15 16 = = 1.0001(U2) Ostatecznie: 0.101 + 1.0001 = = 1.1011 Wykład 4 11 / 31 METODA NIERESTYTUCYJNA - przykład 2 Podziel A przez B, gdzie A=− 15 = 1.1100111(U2) 128 5 = 1.0110000(U2) 8 Warunek |A| < |B| jest spełniony. B=− Oczekiwany wynik: − Bożena Woźna-Szcześniak (AJD) 5 25 8 5 25 : (− ) = · = 128 8 128 5 16 Wstep ˛ do Informatyki Wykład 4 12 / 31 METODA NIERESTYTUCYJNA – przykład 2 ⇐ r0 B(−); r1 (−) ⇐ r2 B(−); r3 (+) ⇐ r4 B(−); r5 (−) ⇐ r6 r0 r1 r6 1.1100111 1.1001110 r1 + (−B) 1.100111 + 0.1010 0.001111 0.011110 r3 + B 0.011110 + 1.0110 1.110110 1.10110 r3 + (−B) 1.10110 + 0.1010 0.01010 r7 0.1010 r2 r3 r4 r5 B(−); r7 (+) Bożena Woźna-Szcześniak (AJD) r7 + B 0.1010 + 1.0110 0.0000 q1 = 1 A = 1.1100111(U2) B = 1.0110000(U2) Bit znaku: q1 = 1 q2 = 0 q3 = 1 q4 = 0 Wstep ˛ do Informatyki Pseudo iloraz: Q = q1 .q2 q3 = = 1.010(U2) Poprawka: −1 + 2−4 = − 15 16 = = 1.0001(U2) Ostatecznie: 1.010 + 1.0001 = 5 = 0.0101(U2) = 16 Wykład 4 13 / 31 WARTOŚĆ LICZBY Z NADMIAREM Dotychczas poznane kody liczb binarnych nie pozwalaja˛ na uszeregowanie w porzadku ˛ rosnacym ˛ słów kodowych. Dlaczego? Rozważmy nastepuj ˛ acy ˛ przykład słów kodowych 3 bitowych. Wówczas słowa kodowe kolejnych liczb musiałyby sie˛ układać nastepuj ˛ aco: ˛ 000, 001, 010, 011, 100, 101, 110, 111, gdze słowo kodowe 000 powinno określać liczbe˛ najmniejsza, ˛ a słowo kodowe 111 liczbe˛ najwieksz ˛ a. ˛ Ale zarówno poznany już kod znak-moduł, jak i kod U2 na to nie pozwalaja: ˛ kod 000 001 010 011 100 101 110 111 ZM 0 1 2 3 0 −1 −2 −3 U2 0 1 2 3 −4 −3 −2 −1 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 14 / 31 WARTOŚĆ LICZBY Z NADMIAREM Niech wartość binarna słowa kodowego bedzie ˛ równa kodowanej liczbie pomniejszonej o pewna˛ stała˛ zwana˛ nadmiarem (ang. excess lub bias). W zależności od tej stałej słowa kodowe bed ˛ a˛ oznaczały różne liczby, np.: kod 000 001 010 011 100 101 110 111 Bożena Woźna-Szcześniak (AJD) 4 -4 -3 -2 -1 0 1 2 3 Wartość nadmiaru – BIAS 3 2 1 0 -1 -2 -3 -2 -1 0 1 2 -2 -1 0 1 2 3 -1 0 1 2 3 4 0 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 7 3 4 5 6 7 8 4 5 6 7 8 9 Wstep ˛ do Informatyki -3 3 4 5 6 7 8 9 10 Wykład 4 15 / 31 WARTOŚĆ LICZBY Z NADMIAREM UWAGA: W zależności od nadmiaru możemy otrzymywać różne zakresy kodowanych liczb. Przykładowo dla przedstawionego w tabeli 3 bitowego kodu i nadmiaru 4 otrzymujemy zakres od -4 do 3. Nadmiar można tak dobrać, aby zakres w całości zawierał sie˛ po stronie liczb ujemnych lub dodatnich. Przykładowo dla przedstawionego w tabeli 3 bitowego kodu i nadmiaru -3 otrzymujemy zakres od 3 do 10. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 16 / 31 WARTOŚĆ LICZBY Z NADMIAREM - definicja Wartość dziesietna ˛ liczby zapisanej w dwójkowym kodzie z nadmiarem bn−1 bn−2 . . . b2 b1 b0 (BIAS) = = bn−1 · 2n−1 + bn−2 · 2n−2 + . . . + b2 · 22 + b1 · 21 + b0 · 20 − BIAS, gdzie bi - i-ty bit, cyfra dwójkowa 0 lub 1 n - liczba bitów w zapisie liczby bias - nadmiar, odchyłka w stosunku do naturalnych wartości słów kodowych. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 17 / 31 KODOWANIE Z NADMIAREM - PRZYKŁAD 1 Dla kodu z nadmiarem BIAS = 129(10) oblicz wartość słowa kodowego 11111111(BIAS=129) . 11111111(BIAS=129) = 27 + 26 + 25 + 24 + 23 + 22 + 21 + 20 − 129 = = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 − 129 = = 255 − 129 = = 126(10) . Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 18 / 31 KODOWANIE Z NADMIAREM - PRZYKŁAD 2 Dla kodu z nadmiarem BIAS = 63(10) oblicz wartość słowa kodowego 00011111(BIAS=63) . 00011111(BIAS=63) = 24 + 23 + 22 + 21 + 20 − 63 = = 16 + 8 + 4 + 2 + 1 − 63 = = 31 − 63 = = (−32)(10) . Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 19 / 31 Przeliczanie liczb dziesietnych ˛ na liczby z nadmiarem Procedura przeliczania liczby dziesietnej ˛ na dwójkowy zapis z nadmiarem 1. Do wartości liczby dziesietnej ˛ dodaj nadmiar bias. Otrzymasz w ten sposób wartość dziesietn ˛ a˛ binarnego zapisu liczby w systemie dwójkowym z nadmiarem. 2. Obliczona˛ wartość słowa kodowego przelicz na system dwójkowy. 3. Wynikowe słowo binarne uzupełnij bitami o wartości 0 do długości formatu. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 20 / 31 Przeliczyć liczbe˛ dziesietn ˛ a˛ 95(10) na zapis w 8-bitowym kodzie z nadmiarem 129(10) Obliczamy wartość dziesietn ˛ a˛ słowa kodowego: 95 + 129 = 224 Otrzymana˛ wartość słowa kodowego przeliczamy na system dwójkowy: 224(10) = 11100000(2) 95(10) = 11100000(BIAS=129) Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 21 / 31 Przeliczyć liczbe˛ dziesietn ˛ a˛ (−24)(10) na zapis w 8-bitowym kodzie z nadmiarem 129(10) Obliczamy wartość dziesietn ˛ a˛ słowa kodowego: (−24) + 129 = 105 Otrzymana˛ wartość słowa kodowego przeliczamy na system dwójkowy: 105(10) = 1101001(2) (−24)(10) = 01101001(BIAS=129) Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 22 / 31 Zakres liczb z nadmiarem Słowa kodowe tworza˛ ciag ˛ rosnacy ˛ w naturalnym systemie binarnym. Najmniejszym co do wartości słowem kodowym jest 0 . . . 0: min(BIAS) = 0...0(BIAS) = 0 − BIAS, a najwiekszym ˛ 1 . . . 1: max(BIAS) = 1...1(BIAS) = 2n − 1 − BIAS. Zatem zakres n bitowej liczby dwójkowej w kodzie z nadmiarem bias Z(BIAS) = h−BIAS; 2n − 1 − BIASi Zakres ten może być dowolnie przesuwany na osi liczbowej poprzez zmiane˛ odchylenia. Dzieki ˛ temu zawsze można go dopasować do bieżacych ˛ potrzeb obliczeniowych Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 23 / 31 ZADANIE 1 - Jakie zakresy posiadaja: ˛ 4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 23 < 0000(BIAS=8) , 1111(BIAS=8) >=< −8, 7 > Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 24 / 31 ZADANIE 1 - Jakie zakresy posiadaja: ˛ 4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 23 < 0000(BIAS=8) , 1111(BIAS=8) >=< −8, 7 > 8 bitowe liczby w kodzie z nadmiarem BIAS = 128 = 27 < 00000000(BIAS=128) , 11111111(BIAS=128) >=< −128, 127 > Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 24 / 31 ZADANIE 1 - Jakie zakresy posiadaja: ˛ 4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 23 < 0000(BIAS=8) , 1111(BIAS=8) >=< −8, 7 > 8 bitowe liczby w kodzie z nadmiarem BIAS = 128 = 27 < 00000000(BIAS=128) , 11111111(BIAS=128) >=< −128, 127 > 16 bitowe liczby w kodzie z nadmiarem BIAS = 32768 = 215 < 0000000000000000(BIAS=215 ) , 1111111111111111(BIAS=215 ) > =< −32768, 32767 > Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 24 / 31 Arytmetyka liczb z nadmiarem - Dodawanie Kod binarny liczby w zapisie z nadmiarem ma wartość: c(BIAS) = liczba + BIAS Suma dwóch kodów da nam: c1(BIAS) = liczba1 + BIAS c2(BIAS) = liczba2 + BIAS c1(BIAS) + c1(BIAS) = (liczba1 + liczba2 ) + 2 · BIAS Prosta suma dwóch słów kodowych prowadzi do wyniku, który jest za duży o wartość nadmiaru. Aby zatem otrzymać słowo kodowe odpowiadajace ˛ sumie liczb, należy od wyniku dodawania odjać ˛ nadmiar: c1+2(BIAS) = c1(BIAS) + c2(BIAS) − BIAS Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 25 / 31 Obliczyć 0011(BIAS=7) + 1010(BIAS=7) 0 0 1 1 + 1 0 1 0 1 1 0 1 − 0 1 1 1 0 1 1 0 0011(BIAS=7) + 1010(BIAS=7) = 0110(BIAS=7) Sprawdzenie: 0011(BIAS=7) = 3 − 7 = −4 1010(BIAS=7) = 10 − 7 = 3 0110(BIAS=7) = 6 − 7 = −1 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 26 / 31 Arytmetyka liczb z nadmiarem - Odejmowanie Kod binarny liczby w zapisie z nadmiarem ma wartość: c(BIAS) = liczba + BIAS Różnica dwóch kodów da nam: c1(BIAS) = liczba1 + BIAS c2(BIAS) = liczba2 + BIAS c1(BIAS) − c1(BIAS) = liczba1 − liczba2 Prosta różnica dwóch słów kodowych prowadzi do wyniku, który jest za mały o wartość nadmiaru. Aby zatem otrzymać słowo kodowe odpowiadajace ˛ różnicy liczb, należy do wyniku odejmowania dodać nadmiar: c1−2(BIAS) = c1(BIAS) − c2(BIAS) + BIAS Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 27 / 31 Obliczyć 1011(BIAS=7) − 1110(BIAS=7) 1 0 1 1 − 1 1 1 0 1 1 1 0 1 + 0 1 1 1 1 0 1 0 0 1011(BIAS=7) − 1110(BIAS=7) = 0100(BIAS=7) Sprawdzenie: 1011(BIAS=7) = 11 − 7 = 4 1110(BIAS=7) = 14 − 7 = 7 0100(BIAS=7) = 4 − 7 = −3 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 28 / 31 ZADANIA Zad.1 Obliczyć wartość dzisietn ˛ a˛ liczb dwójkowych z nadmiarem: a) 1101(BIAS=9) b) 1110(BIAS=8) c) 0011(BIAS=7) d) 1001(BIAS=6) e) 0110(BIAS=5) f ) 1010(BIAS=4) Zad.2 Przelicz liczby dziesietne ˛ na ich 4-bitowy kod binarny z nadmiarem 6: a) 5(10) b) −5(10) c) 8(10) d) e) −4(10) 3(10) f ) −9(10) Zad.3 Oblicz: a) 0111(BIAS=8) + 1000(BIAS=8) b) 1111(BIAS=5) + 0001(BIAS=5) c) 0100(BIAS=9) + 1011(BIAS=9) d) 0011(BIAS=7) − 1001(BIAS=7) e) 1000(BIAS=6) − 1100(BIAS=6) f ) 1010(BIAS=8) − 1001(BIAS=8) Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 29 / 31 Kodowanie znaków Najbardziej popularnym standardem kodowania znaków jest kod ASCII: zapisuje znaki na 7 bitach obejmuje kody od 0 do 127; np. wielkie litery alfabetu łacińskiego odpowiadaja˛ kodom 65 –90, małe 97 –122, cyfry arabskie 48 –57 użycie pozostałego ósmego bitu bajta tworzy tzw. Extended ACSII (rozszerzony kod ASCII) Potrzeba reprezentacji innych znaków (np. narodowych znaków diakrytycznych) spowodowała potrzebe˛ stworzenia dodatkowych kodów. Istnieje kilka standardów kodowania polskich znaków, najbardziej popularne to: ISO-8859-2 (Latin-2) i Windows-1250. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 30 / 31 Kodowanie znaków Współczesnym standardem kodowania znaków jest Unicode (UCS): powstał jako próba ujednolicenia kodowania znaków różnych jezyków ˛ w Internecie pierwotnie składał sie˛ z 16 bitów dzisiejszy standard UCS ISO 10646 operuje na 31-bitach UCS obejmuje wszystkie podstawowe alfabety świata: arabski,hebrajski, japoński, koreański, chiński kody liter znaków diakrytycznych alfabetu łacińskiego znajduja˛ sie˛ w zakresie 256 –383 Unicode. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 4 31 / 31