Zestaw 3. - Zapis liczb binarnych ze znakiem 1 Zapis znak - moduł (ZM) Zapis liczb w systemie Znak - moduł Znak liczby o n bitach zależy od najstarszego bitu b n 1 (tzn. cyfry o najwyższej pozycji): b n 1 = 0 oznacza liczbę dodatnią; b n 1 = 1 oznacza liczbę ujemną. Uwaga: jest to jedyny z systemów, omawianych w poniższym zestawie, w którym jedna z cyfr nie ma przyporządkowanej sobie wagi; b n 1 to bit znaku i nie ma wpływu na moduł liczby. Pozostałe bity, znajdujące się na pozycjach od n 2 do 0, mają wagi identyczne, jak w naturalnym systemie binarnym. Bity te tworzą moduł liczby. Zapis dowolnej liczby całkowitej o n bitach w systemie znak - moduł : b n 1 b n 2... b 2 b 1 b 0 (ZM) = ( 1) b n 1 (b n 2 2 n 2 +... + b 2 2 2 + b 1 2 1 + b 0 2 0) 1. Jaką najmniejszą oraz jaką największą liczbę całkowitą można otrzymać za pomocą kodu binarnego o n bitach w zapisie ZM? 2. Zapisz liczbę przeciwną do podanej (mamy do dyspozycji osiem bitów; w podpunkcie c) cztery z nich opisują część całkowitą, cztery ułamkową): a) 10111001 (ZM) b) 00000000 (ZM) //Co należałoby zrobić, gdybyśmy mieli do zamiany liczbę 0 (ZM)? c) 1101.0101 (ZM) 3. Używamy zapisu ZM dla ośmiobitowych liczb, których cztery ostatnie bity są zarezerwowane na część ułamkową modułu. Oblicz: a) 0110.1101 (ZM) =? (10) b) 1110.1101 (ZM) =? (10) c) 5.4 (10) =? (ZM) Dodawanie i odejmowanie liczb o n bitach w zapisie znak - moduł p n 1 q n 1 t = p + q 0 0 dodawanie modułów, t n 1 = 0 1 1 dodawanie modułów, t n 1 = 1 0 1 odejmowanie mniejszego modułu od większego; wynik ma 1 0 znak większego p n 1 q n 1 t = p q 0 0 odejmowanie mniejszego modułu od większego; jeśli p > q t n 1 = 1 1 p n 1, jeśli nie: t n 1 =NOT(p n 1) 0 1 dodawanie modułów, t n 1 = 0 1 0 dodawanie modułów, t n 1 = 1 1 Ćwiczenia audytoryjne z przedmiotu Podstawy informatyki, Wydział Fizyki i Informatyki Stosowanej AGH, 2016/2017. Elżbieta Wach (Elzbieta.Wach@fis.agh.edu.pl), http://galaxy.agh.edu.pl/~ewach/pi.html 1
4. Używamy zapisu ZM dla czterobitowych liczb całkowitych. Oblicz: a) 1101 (ZM) + 1001 (ZM) =? (ZM) b) 1001 (ZM) + 0101 (ZM) =? (ZM) c) 1001 (ZM) 1101 (ZM) =? (ZM) d) 1001 (ZM) 0101 (ZM) =? (ZM) Uwaga: w tym zadaniu działania wykonujemy bezpośrednio w systemie ZM. System uzupełnień do 1 (U1) Zapis liczb w systemie U1 Najstarszy bit b n 1 ma zmodyfikowaną wagę: w n 1 = 2 n 1 + 1, co pozwala na zapis liczb ujemnych. Pozostałe bity, znajdujące się na pozycjach od n 2 do 0, mają wagi identyczne, jak w naturalnym systemie binarnym. Zapis dowolnej liczby całkowitej o n bitach w systemie U1: b n 1 b n 2... b 2 b 1 b 0 (U1) = b n 1 ( 2 n 1 + 1 ) + b n 2 2 n 2 +... + b 2 2 2 + b 1 2 1 + b 0 2 0 5. Jaką najmniejszą oraz jaką największą liczbę całkowitą można otrzymać za pomocą kodu binarnego o n bitach w zapisie U1? 6. Znajdź wagę najstarszego bitu liczby stałoprzecinkowej o n bitach przed przecinkiem i m bitach po przecinku w zapisie U1. Wskazówka: w zapisie U1 liczba o samych jedynkach musi być zerem. Operacje arytmetyczne na liczbach o n bitach w systemie U1 Dodajemy tak jak w zwykłym systemie binarnym naturalnym, ale z jednym wyjątkiem: jeśli pozostanie nam przeniesienie poza bit znaku, to do najmłodszego bitu wyniku dodajemy 1. Odejmowanie realizujemy, obliczając liczbę przeciwną do tej, którą należy odjąć. Następnie wykonujemy dodawanie. Liczbę przeciwną do danej obliczamy negując wszystkie bity liczby wejściowej. 7. Zapisz liczbę przeciwną do podanej: a) 10111001 (U1) b) 00000000 (U1) c) 1101.0101 (U1) 2
8. Używamy zapisu U1 dla ośmiobitowych liczb, których cztery ostatnie bity są zarezerwowane na część ułamkową. Oblicz: a) 0110.1101 (U1) =? (10) b) 1110.1101 (U1) =? (10) c) 5.4 (10) =? (U1) 9. Używamy zapisu U1 dla czterobitowych liczb całkowitych. Oblicz: a) 1101 (U1) + 1011 (U1) =? (U1) b) 1101 (U1) + 1001 (U1) =? (U1) (...czy znak wyniku zgadza się z oczekiwaniami?) c) 1001 (U1) + 0101 (U1) =? (U1) d) 1001 (U1) 1101 (U1) =? (U1) e) 1011 (U1) 1010 (U1) =? (U1) Uwaga: w tym zadaniu działania wykonujemy bezpośrednio w systemie U1. System uzupełnień do 2 (U2) Zapis liczb w systemie U2 Najstarszy bit b n 1 ma zmodyfikowaną wagę: w n 1 = 2 n 1. Pozostałe bity, znajdujące się na pozycjach od n 2 do 0, mają wagi identyczne, jak w naturalnym systemie binarnym. Zapis dowolnej liczby całkowitej o n bitach w systemie U2: b n 1 b n 2... b 2 b 1 b 0 (U2) = b n 1 ( 2 n 1) + b n 2 2 n 2 +... + b 2 2 2 + b 1 2 1 + b 0 2 0 10. Jaką najmniejszą oraz jaką największą liczbę całkowitą można otrzymać za pomocą kodu binarnego o n bitach w zapisie U2? Operacje arytmetyczne na liczbach o n bitach w systemie U2 Dodajemy tak jak w zwykłym systemie binarnym naturalnym. Jeśli pozostanie nam przeniesienie poza bit znaku, to je pomijamy. Odejmujemy tak jak w zwykłym systemie binarnym naturalnym. Jeśli pozostanie nam pożyczka spoza bitu znaku, to ją pomijamy. Liczbę przeciwną do danej obliczamy negując wszystkie bity liczby wejściowej i do najmłodszego bitu wyniku dodając 1. Inny sposób: przepisujemy wszystkie cyfry zaczynając od prawej strony liczby aż do napotkania pierwszej jedynki. Przepisujemy ją, a dalsze bity negujemy. 3
11. Używamy zapisu U2 dla ośmiobitowych liczb, których cztery ostatnie bity są zarezerwowane na część ułamkową. Oblicz: a) 0110.1101 (U2) =? (10) b) 1110.1101 (U2) =? (10) c) 5.4 (10) =? (U2) 12. Zapisz liczbę przeciwną do podanej: a) 10111001 (U2) b) 00000000 (U2) c) 11111111 (U2) d) 1101.0101 (U2) e) 10000000 (U2) 13. Używamy zapisu U2 dla czterobitowych liczb całkowitych. Oblicz: a) 1101 (U2) + 1011 (U2) =? (U2) b) 1101 (U2) + 1001 (U2) =? (U2) (...czy znak wyniku zgadza się z oczekiwaniami?) c) 1001 (U2) + 0101 (U2) =? (U2) d) 1001 (U2) 1101 (U2) =? (U2) e) 1011 (U2) 1010 (U2) =? (U2) Uwaga: w tym zadaniu działania wykonujemy bezpośrednio w systemie U2. 14. Co jest wynikiem przesunięcia bitowego w lewo/w prawo w naturalnym systemie binarnym? Jak takie przesunięcie bitowe zrealizować w systemie U2? System binarny z nadmiarem Zapis liczb w systemie z nadmiarem W systemie z nadmiarem wszystkie bity mają wagi identyczne jak w naturalnym systemie binarnym. Jedyną różnicą jest to, że od wyniku odejmujemy podaną wartość bias - nadmiar. Zapis dowolnej liczby całkowitej o n bitach w systemie 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 15. Jaką najmniejszą oraz jaką największą liczbę całkowitą można otrzymać za pomocą kodu binarnego o n bitach w systemie z nadmiarem dla zadanej wartości bias? 4
16. Ile musi wynosić bias w systemie z nadmiarem, aby na n bitach zapisać całkowite liczby, z których maksymalna ma wartość dziesiętną 0? 17. Ile musi wynosić bias w systemie z nadmiarem, aby na n bitach zapisać całkowite liczby, których zakres jest identyczny z zakresem n-bitowych liczb w zapisie U2? 18. Używamy zapisu z nadmiarem dla ośmiobitowych liczb całkowitych. Dziesiętna wartość nadmiaru (bias) podana jest w indeksie dolnym. Oblicz: a) 01101101 (bias=20) =? (10) b) 11101101 (bias= 20) =? (10) c) 23 (10) =? (bias=24) Zapis liczb zmiennoprzecinkowych 19. Definiujemy własny typ danych, który jest oparty na systemie binarnym o ośmiu bitach. 4 najstarsze bity (po lewej) reprezentują cechę znormalizowanej liczby zmiennoprzecinkowej, a pozostałe 4 bity (po prawej) - część ułamkową jej mantysy: c 3 c 2 c 1 c 0 m 1 m 2 m 3 m 4 a) Uczyliśmy się, że każda liczba zmiennoprzecinkowa składa się z mantysy m, podstawy systemu p i cechy c: L = m p c. Dlaczego w naszym typie danych pominięto p oraz część całkowitą mantysy? b) Często w różnych językach programowania mantysę zapisuje się w systemie U1, natomiast cechę w systemie z nadmiarem. Przyjmijmy, że w naszym typie danych jest podobnie, a bias cechy wynosi 7. Proszę zamienić liczby 100 (10) i 101 (10) na kody binarne zapisane zgodnie z podanym schematem. Czy liczby udało się zapisać dokładnie? Jeśli nie, to ile wynosi błąd zaokrąglenia? c) Jaką zaletę niosłoby ze sobą zwiększenie liczby bitów cechy, a jaką części ułamkowej mantysy? 5