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.