Zadanie 1 Zamień na system (2) i (16) liczbę 123(10)
Transkrypt
Zadanie 1 Zamień na system (2) i (16) liczbę 123(10)
Zadanie 1 Zamień na system (2) i (16) liczbę 123(10) i zrób sprawdzenie. Metoda polega na dzieleniu liczby w układzie dziesiętnym przez 2 (lub przez 16) i zapisywaniu kolejnych reszt, do chwili, gdy zamieniana liczba stanie się zerem. Zamiana na układ dwójkowy: 123 : 2 = 61 reszta 1 61 : 2 = 30 reszta 1 30 : 2 = 15 reszta 0 15 : 2 = 7 reszta 1 7 : 2 = 3 reszta 1 3 : 2 = 1 reszta 1 1 : 2 = 0 reszta 1 Koniec, liczba zamieniana stała się zerem. Teraz zapisujemy reszty kolejno od lewej strony do prawej. Dostajemy: 12310 = 11110112 Sprawdzenie polega na pomnożeniu liczby dwójkowej przez potęgi liczby 2. 1 · 26 + 1 · 25 + 1 · 24 + 1 · 23 + 0 · 22 + 1 · 21 + 1 · 20 = 64 + 32 + 16 + 8 + 0 + 2 + 1 = 123 Zamiana na układ szesnastkowy: 123 : 16 = 7 reszta 11 (w układzie szesnastkowym 11(10) to B) 7 : 16 = 0 reszta 7 Koniec. Zapisujemy reszty jak poprzednio: 12310 = 7B16 Sprawdzenie (w miejsce B wpisujemy 11) 7 · 161 + (11) · 160 = 112 + 11 = 123 Zadanie 2 Odejmij w systemie (2) i zrób sprawdzenie: (a) 45(10) – 3(10); (b) 18(10) – 45(10) (a) Zamieniamy obie liczby na system dwójkowy: 4510 = (32 + 8 + 4 + 1)10 = 1 · 25 + 0 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 = 1011012 310 = 1 · 21 + 1 · 20 = 112 Podpisujemy liczby pod sobą, dopiszmy zera przed mniejszą liczbą, aby pozycje się zgadzały: 101101 −000011 Zaczynamy od ostatniej cyfry, 1 – 1 daje 0, nie ma kłopotu. Następnie od 0 mamy odjąć 1, “pożyczamy” jedynkę z pozycji po lewej i mamy 10 – 1 = 1. Sytuacja wygląda tak, jak niżej (pytajniki to nieznane jeszcze cyfry). 101001 −000011 ———— ????10 Na czerwono jest zaznaczone zero, w które zmieniła się “pożyczona” jedynka. Dalej mamy już do odejmowania same zera więc ostatecznie wynik to: 1010102 = 32 + 8 + 2 = 4210 . Zgadza się. (b) Zamieniamy obie liczby na system dwójkowy: 4510 = 1011012 (jak w punkcie (a)) 1810 = 16 + 2 = 24 + 22 = 100102 Ponieważ w zadaniu nie jest wyjaśnione jak reprezentowane są liczby ujemne odejmijmy mniejszą liczbę od większej, a potem wyjaśnimy możliwą interpretację wyniku. Jak poprzednio dopisujemy zera na początku i mamy: 101101 −010010 Zaczynamy od ostatniej cyfry, 1 – 0 daje 1, nie ma kłopotu. Następnie od 0 mamy odjąć 1, “pożyczamy” jedynkę z pozycji po lewej i mamy 10 – 1 = 1. Sytuacja wygląda tak, jak niżej (pytajniki to nieznane jeszcze cyfry). 101001 −010010 ———— ????11 Odejmujemy po zerze od czerwonego zera i jedynki, potem ponownie “pożyczamy” jedynką i od 10 odejmujemy 1, co daje 1. Końcowy rezultat: 110112 = (16 + 8 + 2 + 1)10 = 2710 . Zgadza się. Nasz rzeczywisty wynik powinien być ujemny. W komputerach często stosuje się system w którym liczba –1 jest reprezentowana przez ciąg jedynek: 1111...11111, tyle jedynek, ile bitów jest w słowie komputera, np. 32, a kolejne liczby ujemne są reprezentowane przez liczby o 1, 10, 11, itd mniejsze. Ten system ma dużą zaletę - jak widać operacja –1 + 1 od razu daje same zera, czyli liczbę zero w każdym układzie liczenia, poza tym liczbę ujemną tworzy się z dodatniej dwiema prostymi operacjami: • od liczby dodatniej odejmuje się 1 (w tym wypadku: 110112 − 12 = 110102 ), • wykonuje się operację XOR z liczbą złożoną z samych zer, co w praktyce wymienia w danej liczbie wszystkie zera na jedynki i odwrotnie. W naszym wypadku, zakładając 32 bitowe słowo oznacza to wykonanie: 000000000000000000000000000000002 XOR 000000000000000000000000000110102 = 111111111111111111111111111001012 = −2710 (w systemie, o którym było wyżej). Ciąg dalszy na następnej stronie Zadanie 3 Pomnóż w systemie (2) liczby: 24(10)* 11(10) Zamieniamy obie liczby na system dwójkowy: 2410 = (16 + 8)10 = 110002 1110 = (8 + 2 + 1)10 = 010112 Mnożenie polega na wielokrotnym dodawaniu. Aby było mniej pisania pomnóżmy 11 przez 24 bo liczba 24 ma w postaci dwójkowej tylko dwie jedynki. Podpisujemy liczby pod sobą, poprzedzając je zerami, niech słowo komputera liczy 16 bitów, aby dużo nie pisać: 00000000000010112 RAZY 00000000000110002 ————————– 00000000000000002 , tu będziemy dodawać składniki podczas mnożenia. Algorytm jest taki: Zaczynamy od prawej strony dolnej mnożonej liczby. Jeżeli jest tam 0 to nic nie dodajemy, jeżeli jest 1 to dodajemy górną liczbę. Następnie górną liczbę przesuwamy w lewo o jedną pozycję, a w dolnej liczbie rozpatrujemy kolejną cyfrę idąc w lewo. Tą operację powtarzamy. W naszym wypadku po lewej stronie dolnej liczby są trzy zera, więc tylko trzykrotnie przesuwamy górną liczbę i mamy nadal wynik zero, ale trafiamy na (czerwoną) jedynkę. Oto sytuacja: 00000000010110002 RAZY 00000000000110002 ————————– 00000000000000002 PLUS 00000000010110002 dodajemy górną liczbę ————————– 00000000010110002 i mamy jak dotychczas taki wynik. Przesuwamy górną liczbę, w dolnej liczbie mamy ponownie jedynkę, więc: 00000000101100002 RAZY 00000000000110002 ————————– 00000000010110002 PLUS 00000000101100002 dodajemy górną liczbę ————————– 00000001000010002 i mamy taki wynik. (patrząc od lewej strony najpierw w dodawaniu mamy trze zera, potem 1 + 1 = 10, wpisujemy 0, przenosimy 1, mamy znów to samo, ponownie to samo, i wreszcie 0 + 1 = 1, co kończy dodawanie). Sprawdźmy: 00000001000010002 = 1 · 28 + 1 · 23 = 256 + 8 = 24610 . Zgadza się. Ciąg dalszy na następnej stronie Zadanie 4 Podziel w systemie (2) liczby: 114(10) : 3(10) Zamieniamy obie liczby na system dwójkowy: 11410 = (64 + 32 + 16 + 2)19 = 11100102 310 = 112 Upewniamy się, że liczba dzielona jest większa od dzielnika (czyli wynik jest przynajmniej równy 00...012 ). Następnie przesuwamy dzielnik w lewo, tak samo przesuwamy jedynkę w wyniku, dopóki można, tzn. dopóki dzielnik jest mniejszy lub równy liczbie dzielonej. W naszym wypadku przesuwamy dzielnik i wynik o ?? pozycji dostając taką sytuację wyjściową: 11100102 ; wynik, jak dotąd jest równy 1000002 11000002 ————– Odejmujemy dolną liczbę od górnej (metoda jak w zadaniu 2) 00100102 Teraz przesuwamy z kolei dzielnik w prawo, aż zacznie mieścić się w liczbie powstałej w poprzednim odejmowaniu. Jednocześnie w prawo przesuwamy pozycję w wyniku (NIE wynik, tylko pozycję bitu). W naszym przypadku przesuwamy o 3 bity. Ponownie dolna liczba mieści się w górnej, w wyniku wpisujemy 1 (na czerwono) w aktualnej pozycji: 00100102 ; wynik, jak dotąd jest równy 1001002 00011002 ————– Odejmujemy dolną liczbę od górnej 00001102 Ponownie przesuwamy dzielnik i pozycję bitu wyniku w prawo, teraz wystarczy o 1 bit, aby dzielnik mieścił się w liczbie z poprzedniego odejmowania: 00001102 ; wynik, jak dotąd jest równy 1001102 00001102 ————– Odejmujemy dolną liczbę od górnej 00000002 Po odejmowaniu dostajemy zero, więc koniec operacji, liczby podzieliły się bez reszty. Sprawdzamy wynik: 1001102 = (32 + 4 + 2)10 = 3810 . Zgadza się. Pozdrowienia - Antek. W razie pytań pisz na priv.