Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 1 / 1
DZIELENIE LICZB BINARNYCH Dzielenie można przeprowadzić wykorzystujac następujace metody: metoda porównawcza, metoda nierestytucyjna, metoda restytucyjna. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 2 / 1
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: Niech: A - dzielna, B - dzielnik. r 0 - reszta poczatkowa R n = r n 2 n - reszta z dzielenia r n - n-ta reszta częściowa Q - iloraz uzyskany w algorytmie o bitach q i. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 3 / 1
DZIELENIE LICZB BINARNYCH - metoda porównawcza Polega na porównywaniu dzielnika z n ta reszta. 1.Jeżeli przesunięta reszta częściowa jest większa lub równa od dzielnika (r >= B), to: kolejny bit ilorazu q i ustawiamy na 1 (tj. q i = 1), odejmujemy dzielnik od tej reszty. 2.Jeżeli przesunięta reszta częściowa jest mniejsza od dzielnika (r < B), to kolejny bit ilorazu q i = 0. 3.Dokonujemy przesunięcia otrzymanego wyniku o jedno miejsce w lewo i przechodzimy do punktu pierwszego. Wynikiem dzielenia jest iloraz Q o bitach q 0 q 1...q i. W pierwszym kroku porównujemy resztę poczatkow a r 0 (tzn. A zapisana na tylu pozycjach co B) z dzielnikiem. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 4 / 1
METODA PORÓWNAWCZA przykład 1 Podzielić przez A = 25 128 = 1.0011001 (ZM) B = 5 16 = 0.0101 (ZM). Warunek A < B jest spełniony. Porównujemy kolejne reszty częściowe z modułem dzielnika. Oczekiwany wynik: 25 128 : 5 16 = 25 128 16 5 = 5 8 = 1.101 (ZM) Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 5 / 1
METODA PORÓWNAWCZA przykład 1 r 0.0011001 r 1.011001 r 1 > B r 1 B q 1 = 1.011001.010100.000101 r 2.00101 r 2 < B.00101 q 2 = 0 r 3.0101 A = 1.0011001 (ZM) B = 0.0101 (ZM) Bit znaku: q 0 = a 0 b 0 q 0 = 1 r 3 = B r 3 B q 3 = 1.0101.0101.0000 r 4.0000 Q = q 0.q 1 q 2 q 3 A B = 1.101 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 6 / 1
METODA PORÓWNAWCZA przykład 2 Podzielić przez A = 3 128 = 1.0000011 (ZM) B = 9 16 = 0.1001 (ZM). Warunek A < B jest spełniony. Porównujemy kolejne reszty częściowe z modułem dzielnika. Oczekiwany wynik: 3 128 : 9 16 = 3 128 16 9 = 1 24 1.00001 (ZM) Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 7 / 1
METODA PORÓWNAWCZA przykład 2 r 0.0000011 r 1.0000110 r 1 < B q 1 = 0 r 2.0001100 r 2 < B q 2 = 0 r 3.0011000 r 3 < B q 3 = 0 r 4.0110000 r 4 < B q 4 = 0 r 5.1100000 r 5 B r 5 B q 5 = 1.11000.10010 =.00110 r 6.0110 A = 1.0000011 (ZM) B = 0.1001 (ZM) Bit znaku: q 0 = a 0 b 0 q 0 = 1 Q = q 0.q 1 q 2 q 3 q 4 q 5 A B = 1.00001 Reszta : 0.011 2 6 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 8 / 1
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ęściowej. Pierwsza reszta częściowa jest równa dzielnej. Jeżeli znaki sa zgodne to odejmujemy dzielnik od przesuniętej w lewo kolejnej reszty częściowej; kolejny bit ilorazu q i = 1. Jeżeli znaki sa różne to dodajemy dzielnik do przesuniętej w lewo kolejnej reszty częściowej; kolejny bit ilorazu q i = 0. 2. Powtarzamy punkt 1, aż do momentu, gdy kolejna reszta częściowa będzie równa 0. 3. Do otrzymanego wyniku dodajemy poprawkę równa: 1 + 2 n, gdzie n oznacza n ta resztę z dzielenia. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 9 / 1
METODA NIERESTYTUCYJNA - przykład 1 Podziel A przez B, gdzie A = 15 128 = 1.1110001 (U2) Warunek A < B jest spełniony. Oczekiwany wynik: B = 3 8 = 0.011 (U2) 15 128 : 3 8 = 15 128 8 3 = 5 16 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 10 / 1
METODA NIERESTYTUCYJNA przykład 1 r 0 1.1110001 r 0 r 1 1.110001 B(+); r 1 ( ) r 1 + B q 1 = 0 1.110001 + 0.011000 r 2 0.001001 r 2 r 3 0.01001 B(+); r 3 (+) r 3 B q 2 = 1 0.01001 + 1.10100 r 4 1.11101 r 4 r 5 1.1101 B(+); r 5 ( ) r 5 + B q 3 = 0 1.1101 + 0.0110 r 6 0.0011 r 6 r 7 0.011 B(+); r 7 (+) r 7 B q 4 = 1 0.011 0.011 r 8 0.000 A = 1.1110001 (U2) B = 0.0011 (U2) Bit znaku: q 1 = 0 Pseudo iloraz: Q = q 1.q 2 q 3 q 4 = = 0.101 (U2) Poprawka: 1 + 2 4 = 15 16 = = 1.0001 (U2) Ostatecznie: 0.101 + 1.0001 = = 1.1011 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 11 / 1
METODA NIERESTYTUCYJNA - przykład 2 Podziel A przez B, gdzie A = 15 128 = 1.1100111 (U2) Warunek A < B jest spełniony. Oczekiwany wynik: B = 5 8 = 1.0110000 (U2) 25 128 : ( 5 8 ) = 25 128 8 5 = 5 16 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 12 / 1
METODA NIERESTYTUCYJNA przykład 2 r 0 1.1100111 r 0 r 1 1.1001110 B( ); r 1 ( ) r 1 + ( B) q 1 = 1 1.100111 + 0.1010 r 2 0.001111 r 2 r 3 0.011110 B( ); r 3 (+) r 3 + B q 2 = 0 0.011110 + 1.0110 r 4 1.110110 r 4 r 5 1.10110 B( ); r 5 ( ) r 3 + ( B) q 3 = 1 1.10110 + 0.1010 r 6 0.01010 r 6 r 7 0.1010 B( ); r 7 (+) r 7 + B q 4 = 0 0.1010 + 1.0110 0.0000 A = 1.1100111 (U2) B = 1.0110000 (U2) Bit znaku: q 1 = 1 Pseudo iloraz: Q = q 1.q 2 q 3 = = 1.010 (U2) Poprawka: 1 + 2 4 = 15 16 = = 1.0001 (U2) Ostatecznie: 1.010 + 1.0001 = = 0.0101 (U2) = 5 16 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 13 / 1
WARTOŚĆ LICZBY Z NADMIAREM Dotychczas poznane kody liczb binarnych nie pozwalaja na uszeregowanie w porzadku rosnacym słów kodowych. Dlaczego? Rozważmy następujacy przykład słów kodowych 3 bitowych. Wówczas słowa kodowe kolejnych liczb musiałyby się układać następujaco: 000, 001, 010, 011, 100, 101, 110, 111, gdze słowo kodowe 000 powinno określać liczbę najmniejsza, a słowo kodowe 111 liczbę największa. 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) Wstęp do Informatyki Wykład 4 14 / 1
WARTOŚĆ LICZBY Z NADMIAREM Niech wartość binarna słowa kodowego będzie 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 będa oznaczały różne liczby, np.: Wartość nadmiaru BIAS kod 4 3 2 1 0-1 -2-3 000-4 -3-2 -1 0 1 2 3 001-3 -2-1 0 1 2 3 4 010-2 -1 0 1 2 3 4 5 011-1 0 1 2 3 4 5 6 100 0 1 2 3 4 5 6 7 101 1 2 3 4 5 6 7 8 110 2 3 4 5 6 7 8 9 111 3 4 5 6 7 8 9 10 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 15 / 1
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ł się 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) Wstęp do Informatyki Wykład 4 16 / 1
WARTOŚĆ LICZBY Z NADMIAREM - definicja Wartość dziesiętna liczby zapisanej w dwójkowym kodzie z nadmiarem b n 1 b n 2... b 2 b 1 b 0 (BIAS) = = b n 1 2 n 1 + b n 2 2 n 2 +... + b 2 2 2 + b 1 2 1 + b 0 2 0 BIAS, gdzie słów b i - 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 kodowych. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 17 / 1
KODOWANIE Z NADMIAREM - PRZYKŁAD 1 Dla kodu z nadmiarem BIAS = 129 (10) oblicz wartość słowa kodowego 11111111 (BIAS=129). 11111111 (BIAS=129) = 2 7 + 2 6 + 2 5 + 2 4 + 2 3 + 2 2 + 2 1 + 2 0 129 = = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 129 = = 255 129 = = 126 (10). Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 18 / 1
KODOWANIE Z NADMIAREM - PRZYKŁAD 2 Dla kodu z nadmiarem BIAS = 63 (10) oblicz wartość słowa kodowego 00011111 (BIAS=63). 00011111 (BIAS=63) = 2 4 + 2 3 + 2 2 + 2 1 + 2 0 63 = = 16 + 8 + 4 + 2 + 1 63 = = 31 63 = = ( 32) (10). Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 19 / 1
Przeliczanie liczb dziesiętnych na liczby z nadmiarem Procedura przeliczania liczby dziesiętnej na dwójkowy zapis z nadmiarem 1. Do wartości liczby dziesiętnej dodaj nadmiar bias. Otrzymasz w ten sposób wartość dziesiętna 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) Wstęp do Informatyki Wykład 4 20 / 1
Przeliczyć liczbę dziesiętna 95 (10) na zapis w 8-bitowym kodzie z nadmiarem 129 (10) Obliczamy wartość dziesiętna 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) Wstęp do Informatyki Wykład 4 21 / 1
Przeliczyć liczbę dziesiętna ( 24) (10) na zapis w 8-bitowym kodzie z nadmiarem 129 (10) Obliczamy wartość dziesiętna 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) Wstęp do Informatyki Wykład 4 22 / 1
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: a największym 1... 1: min (BIAS) = 0...0 (BIAS) = 0 BIAS, max (BIAS) = 1...1 (BIAS) = 2 n 1 BIAS. Zatem zakres n bitowej liczby dwójkowej w kodzie z nadmiarem bias Z (BIAS) = BIAS; 2 n 1 BIAS Zakres ten może być dowolnie przesuwany na osi liczbowej poprzez zmianę odchylenia. Dzięki temu zawsze można go dopasować do bieżacych potrzeb obliczeniowych Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 23 / 1
ZADANIE 1 - Jakie zakresy posiadaja: 4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 2 3 < 0000 (BIAS=8), 1111 (BIAS=8) >=< 8, 7 > Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 24 / 1
ZADANIE 1 - Jakie zakresy posiadaja: 4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 2 3 < 0000 (BIAS=8), 1111 (BIAS=8) >=< 8, 7 > 8 bitowe liczby w kodzie z nadmiarem BIAS = 128 = 2 7 < 00000000 (BIAS=128), 11111111 (BIAS=128) >=< 128, 127 > Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 24 / 1
ZADANIE 1 - Jakie zakresy posiadaja: 4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 2 3 < 0000 (BIAS=8), 1111 (BIAS=8) >=< 8, 7 > 8 bitowe liczby w kodzie z nadmiarem BIAS = 128 = 2 7 < 00000000 (BIAS=128), 11111111 (BIAS=128) >=< 128, 127 > 16 bitowe liczby w kodzie z nadmiarem BIAS = 32768 = 2 15 < 0000000000000000 (BIAS=2 15 ), 1111111111111111 (BIAS=2 15 ) > =< 32768, 32767 > Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 24 / 1
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: c 1(BIAS) = liczba 1 + BIAS c 2(BIAS) = liczba 2 + BIAS c 1(BIAS) + c 1(BIAS) = (liczba 1 + liczba 2 ) + 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: c 1+2(BIAS) = c 1(BIAS) + c 2(BIAS) BIAS Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 25 / 1
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) Wstęp do Informatyki Wykład 4 26 / 1
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: c 1(BIAS) = liczba 1 + BIAS c 2(BIAS) = liczba 2 + BIAS c 1(BIAS) c 1(BIAS) = liczba 1 liczba 2 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: c 1 2(BIAS) = c 1(BIAS) c 2(BIAS) + BIAS Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 27 / 1
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) Wstęp do Informatyki Wykład 4 28 / 1
ZADANIA Zad.1 Obliczyć wartość dzisiętna 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 dziesiętne na ich 4-bitowy kod binarny z nadmiarem 6: a) 5 (10) b) 5 (10) c) 8 (10) d) 3 (10) e) 4 (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) Wstęp do Informatyki Wykład 4 29 / 1
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 potrzebę 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) Wstęp do Informatyki Wykład 4 30 / 1
Kodowanie znaków Współczesnym standardem kodowania znaków jest Unicode (UCS): powstał jako próba ujednolicenia kodowania znaków różnych języków w Internecie pierwotnie składał się 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 się w zakresie 256 383 Unicode. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 31 / 1