Kod uzupełnień do 2 (U2) dr inż. Izabela Szczęch WSNHiD Ćwiczenia z wprowadzenia do informatyki Reprezentacja liczb całkowitych Jak kodowany jest znak liczby? Omó wimy dwa sposoby kodowania liczb ze znakiem: kod znak-moduł(zm), kod uzupełnień do dwu (U2). 2 Izabela Szczęch 1
Plan zajęć Kod U2 definicja i konwersja Zakresy liczb reprezentowanych w kodzie U2 Arytmetyka w kodzie U2 3 Kod uzupełnień do dwu - definicja i konwersja Izabela Szczęch 2
Kod uzupełnień do 2 (U2) Motywacja 00001110 (+14 10 ) + 1xxxxxxx (-14 10 ) 00000000 (0) 00001110 + 11110010 00000000 prowadzimy obliczenia na 8-miu bitach, więc pomijamy przeniesienie 1 na 9-ty bit. chcemy by najstarszy bit informowało znaku liczby chcemy tak zapisać -14, aby wykonać powyż sze dodawanie w systemie dwó jkowym bez zastanawiania się czy któ ryś bit jest znakiem czy nie 5 Kod uzupełnień do 2 (U2) 00001110 (+14 10 ) + 11110010 (-14 10 ) 00000000 (0) 2 8-00001110 =100000000 00001110 =11110010 drugi składnik sumy jest uzupełnieniem dwó jkowym liczby 14 zapisanej na 8-miu bitach Uzupełnieniem dwó jkowym (ang. 2C - Two's Complement) liczby x zapisanej za pomocą n bitó w nazywamy liczbę ró wną 2 n x (U2) Kod U2 ułatwia realizację podstawowych operacji arytmetycznych, gdyż nie wymaga oddzielnego obsługiwania bitu znaku (jak to jest w przypadku kodu ZM) 6 Izabela Szczęch 3
Konwersja z kodu U2 na system dziesiętny Wartość dziesiętną liczby w kodzie U2 obliczamy następująco: cyfry mnoż ymy przez wagi pozycji, na któ rych się znajdują i dodajemy otrzymane iloczyny. Waga bitu znakowego jest ujemna i wynosi (-2 n-1 ). c n-1 c n-2 c n-3...c 2 c 1 c 0 (U2) = c n-1 (-2 n- 1 ) + c n-2 2 n- 2 +... + c 2 2 2 + c 1 2 1 + c 0 2 0 (10) gdzie, c - cyfra dwó jkowa 0 lub 1 n - liczba bitó w w zapisie liczby 7 Konwersja z kodu U2 na system dziesiętny Jeśli bit znaku jest ró wny 0, to liczba jest dodatnia i resztę zapisu moż emy potraktować jak liczbę w naturalnym systemie dwó jkowym, bo waga bitu znaku i tak zniknie przy mnoż eniu przez bit znaku czyli 0. Przykład dla zapisu 8-mio bitowego 01101011 (U2) = 0*(-2 7 ) + 1*2 6 + 1*2 5 + 0*2 4 + 1*2 3 + 0*2 2 + 1*2 1 + 1*2 0 = 2 6 + 2 5 + 2 3 + 2 1 + 2 0 =64 + 32 + 8 + 2 + 1 = 107 (10). 8 Izabela Szczęch 4
Konwersja z kodu U2 na system dziesiętny Jeśli bit znaku jest ró wny 1, to liczba ma wartość ujemną. Bit znaku ma wagę (-2 n- 1 ), gdzie n oznacza liczbę bitó w w wybranym formacie U2. Reszta bitó w jest zwykłą liczbą w naturalnym kodzie dwó jkowym. Wagę bitu znakowego i wartość pozostałych bitó w sumujemy otrzymując wartość liczby U2. Przykład dla zapisu 8-mio bitowego 111010111101011 (U2) = 1*(-2 7 ) + 1*2 6 + 1*2 5 + 0*2 4 + 1*2 3 + 0*2 2 + 1*2 1 + 1*2 0 =-128+64+32+8+2+1 = -128 + 107 = (-21) 21) (10). 9 Wyznaczanie liczby przeciwnej w U2 SPOSÓ B 1: Liczbę przeciwną do x moż na wyznaczać z definicji uzupełnienia dwó jkowego jako 2 n x (U2), gdzie n oznacza liczbę bitó w w przyjętym formacie. Przykład: Rozważ my zapis na czterech bitach: Niech x = 0101. Uzupełnieniem dwó jkowym jest x (U2) = 2 4-0101 =10000-0101 = 1011. Niech y = 1011. Uzupełnieniem dwó jkowym jest y (U2) = 2 4-1011 = 0101. Otrzymaliśmy zatem, ż e y (U2) = x. Ponieważ jednak y = x (U2), więc ostatecznie moż emy zapisać, ż e (x (U2) ) (U2 U2) = x. Zatem uzupełnienie dwó jkowe danej liczby reprezentuje liczbę do niej przeciwną. 10 Izabela Szczęch 5
Wyznaczanie liczby przeciwnej w U2 SPOSÓ B 2: Zanegować wszystkie bity zapisu liczby w U2 Do wyniku dodać 1 Przykład: Znajdź liczbę przeciwna do 0101 (U2) (U2). Zanegować wszystkie bity: 1010 Dodać 1: 1010+1=1011 1011 (U2) Sprawdzenie wyniku: 0101 (U2) =4+1=5 (10) ; 1011 (U2) =-8+2+1= 8+2+1=-5 (10) 11 Wyznaczanie liczby przeciwnej w U2 SPOSÓ B 3: 1. Analizę rozpoczynamy od prawej strony zapisu liczby. 2. Do wyniku przepisujemy kolejne bity o wartości 0 wraz z pierwszym napotkanym bitem o wartości 1. 3. Wszystkie pozostałe bity przepisujemy, zmieniając ich wartość na przeciwną. Przykład: Znajdź liczbę przeciwna do 110011001100 (U2) punkt 1-2: 100 punkt 3: 001100110100 (U2). 100 (U2) Sprawdzenie wyniku: 110011001100 (U2) =-2048+1024+128+64+8+4= 2048+1024+128+64+8+4=-820 001100110100 (U2) =512+256+32+16+4=820 (10) 820 (10) ; 12 Izabela Szczęch 6
Zadania Zadania: Oblicz wartość dziesiętną następujących liczb 8-mio bitowych w reprezentacji U2, a następnie znajdź do nich liczby przeciwne (w reprezentacji U2): a) 10000001 (U2) b) 11111111 (U2) c) 01111111 (U2) d) 01010100 (U2) 13 Konwersja dodatnich liczb dziesiętnych na zapis U2 Znajdujemy reprezentację dwó jkową danej wartości liczbowej Uzupełniamy ją z przodu bitami 0 do długości zadanego formatu kodu U2. Przykład: Wyznaczyć 8-mio bitowy kod U2 dla liczby dziesiętnej 27 (10) 27 (10) = 16 + 8 + 2 + 1 = 11011 (2) = 00011011 (U2). (10). 14 Izabela Szczęch 7
Konwersja ujemnych liczb dziesiętnych na zapis U2 SPOSÓ B 1: Wyznaczamy zapis dwó jkowy modułu liczby Otrzymany kod dwó jkowy uzupełniamy z przodu w miarę potrzeb zerami do rozmiaru formatu U2 Wyznaczamy liczbę przeciwną (w dowolny sposó b) Przykład: Wyznaczyć 8-mio bitowy kod U2 dla liczby -45 45 (10). Wyznaczamy kod binarny modułu liczby: 45 (10) =101101 (2) Kod uzupełniamy bitami 0 do wymaganej długości 8-miu bitó w: 00101101 Wyznaczamy liczbę przeciwną do 00101101 (U2) : 11010011 (U2) Stąd (-45) (10) = 11010011 (U2) 15 Konwersja ujemnych liczb dziesiętnych na zapis U2 SPOSÓ B 2: Jeśli do liczby 2 n (n - ilość bitó w w formacie U2) dodamy przetwarzaną liczbę dziesiętną, to zapisany dwó jkowo wynik będzie ró wnoważ ny bitowo (tzn. o takiej samej postaci) kodowi U2 przetwarzanej liczby. Przykład: Wyznaczyć 8-mio bitowy kod U2 dla liczby dziesiętnej -45 45 (10). 2 8 + (-45) = 256-45 = 211 = 11010011 (2). Stąd (-45) (10) = 11010011 (U2) (U2) 16 Izabela Szczęch 8
Zakres liczb w kodzie U2 Jaka jest najmniejsza i największa wartości liczby, któ rą da się przedstawić w danym formacie kodu U2? Liczba największa w U2 powstaje przy bicie znaku ró wnym 0, i przy pozostałych bitach ró wnych 1. Liczba najmniejsza w U2 powstaje przy bicie znaku ró wnym 1, i przy pozostałych bitach ró wnych 0. Zadania: Zakres liczb w kodzie U2 1. Wyznacz zakres liczb dziesiętnych reprezentowanych w kodzie U2 na 4, 8 i 16 bitach. 2. Podaj ogó lny wzó r na określający zakres n-bitowych liczb w kodzie U2. 18 Izabela Szczęch 9
Zakres liczb w kodzie U2 Zakres n-bitowej liczby w kodzie ZM określony jest wzorem: Z (U2) = <-2 n- 1, 2 n- 1-1> W poró wnaniu z kodem znak-moduł, kod U2 jest niesymetryczny, bo na n-bitach moż na zapisać w nim o jedną więcej liczbę ujemną niż liczb dodatnich. 19 Poró wnanie kodó w Poró wnanie interpretacji wartości słó w kodu binarnego w różnych systemach zapisu liczb ze znakiem 20 Izabela Szczęch 10
Arytmetyka w kodzie U2 Dodawanie i odejmowanie w U2 Liczby U2 dodajemy i odejmujemy wg zasad dla naturalnego systemu dwó jkowego. Przeniesienia poza bit znaku ignorujemy (w rzeczywistości takie przeniesienia czy poż yczki mogą być wykorzystywane przez procesor do dodawania liczb o wielokrotnej precyzji). Przykłady dla 8-mio bitowego formatu U2: -5 + 100=95 1 1 1 1 1 0 1 1 + 0 1 1 0 0 1 0 0 1 0 1 0 1 1 1 1 1 przeniesienie poza bit znaku ignorujemy -100-5=-105 1 0 0 1 1 1 0 0-0 0 0 0 0 1 0 1 1 0 0 1 0 1 1 1 22 Izabela Szczęch 11
Kod U2 nadmiar i niedomiar Ponieważ liczby zapisane w systemie U2 posiadają ustalony format (ilość bitó w jest stała), to przy wykonywaniu operacji arytmetycznych może dochodzić do nadmiaró w (wynik większy niż moż na przedstawić za pomocą dostępnych bitó w modułu) lub niedomiaró w. Nadmiar (niedomiar) wystąpi, gdy w U2 suma dwó ch liczb dodatnich (ujemnych) daje w wyniku liczbę ujemną (dodatnią). Nadmiar i niedomiar nie występują przy dodawaniu liczb o przeciwnych znakach Przykłady dla 8-mio bitowego formatu U2: 100+40=nadmiar 0 1 1 0 0 1 0 0 + 0 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 suma liczb dodatnich dała liczbę ujemną -100 + (-40)=niedomiar 1 0 0 1 1 1 0 0 + 1 1 0 1 1 0 0 0 0 1 1 1 0 1 0 0 suma liczb ujemnych dała liczbę dodatnią 23 Arytmetyka w kodzie U2 -zadania Zadania: Stosując dwó jkową reprezentację U2 na 8-miu bitach zapisz następujące liczby całkowite i wykonaj działania: a) 18 + 20 b) -30 + (-25) c) -20 + 60 d) 120 + 32 e) -65 + (-84) 24 Izabela Szczęch 12