Dodawanie dwójkowe Do wykonywania dodawania niezbędna jest znajomość tabliczki dodawania, czyli wyników sumowania każdej cyfry z każdą inną. W systemie binarnym mamy tylko dwie cyfry 0 i 1, zatem tabliczka dodawania jest niezwykle prosta i składa się tylko z 4 pozycji: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Zsumować liczby binarne (2) oraz 10010 (2). Sumowane liczby zapisujemy jedna pod drugą tak, aby w kolejnych kolumnach znalazły się cyfry stojące na pozycjach o tych samych wagach (identycznie postępujemy w systemie dziesiętnym zapisując liczby w słupkach przed sumowaniem): + 10010 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską: + 10010 1011 Jeśli wynik sumowania jest dwucyfrowy (1 + 1 = 10), to pod kreską zapisujemy tylko ostatnią cyfrę 0, a 1 przechodzi do następnej kolumny dodamy ją do wyniku sumowania cyfr w następnej kolumnie. Jest to tzw. przeniesienie (ang. carry). Przeniesienie zaznaczyliśmy na czerwono: 1 + 10010 01011 Jeśli w krótszej liczbie zabrakło cyfr, to dopisujemy zera. Pamiętajmy o przeniesieniach. 1 1 1 + 0010010 0001011
Dodaliśmy wszystkie cyfry, ale przeniesienie wciąż wynosi Zatem dopisujemy je do otrzymanego wyniku (możemy potraktować pustą kolumnę tak, jakby zawierała cyfry 0 i do wyniku sumowania dodać przeniesienie). 1 1 1 0 +00010010 10001011 (2) + 10010 (2) = 10001011 (2) (121 + 18 = 139) Oto kilka dalszych przykładów: 1 1 1 1 1 1 1 01111111 +00000001 10000000 1 1 1 1 1 1 1 01111111 +00000101 10000100 1 1 1 1 10111110 +00001100 11001010 Odejmowanie dwójkowe Przy odejmowaniu korzystamy z tabliczki odejmowania, która w systemie binarnym jest bardzo prosta: 0 0 =0 0 1 =1 i pożyczka do następnej pozycji 1 0 =1 1 1 =0 Odejmując 0 1 otrzymujemy wynik 1 i pożyczkę (ang. borrow) do następnej pozycji. Pożyczka oznacza konieczność odjęcia 1 od wyniku odejmowania cyfr w następnej kolumnie. Identycznie postępujemy w systemie dziesiętnym, tyle że tam jest to o wiele bardziej skomplikowane. Na razie załóżmy, iż od liczb większych odejmujemy mniejsze (w przeciwnym razie musielibyśmy wprowadzić liczby ujemne, a nie chcemy tego robić w tym miejscu). Wykonać odejmowanie w systemie binarnym 110 (2) 1111 (2). Obie liczby umieszczamy jedna pod drugą tak, aby ich cyfry znalazły się w kolumnach o tych samych wagach: 110 1111
Odejmowanie rozpoczynamy od cyfr ostatniej kolumny. Wyniki zapisujemy pod kreską. W tym przykładzie odjęcie ostatnich cyfr 0 1 daje wynik 1 oraz pożyczkę do następnej kolumny. Pożyczki zaznaczamy kolorem czerwonym. 1 110 1111 1 Odjęcie cyfr w drugiej od końca kolumnie daje wynik 1 1 = 0. Od tego wyniku musimy odjąć pożyczkę 0 1 = 1 i pożyczka do następnej kolumny. 1 1 110 1111 11 Według tych zasad kontynuujemy odejmowanie cyfr w pozostałych kolumnach. Pamiętaj o pożyczkach! Jeśli w krótszej liczbie zabraknie cyfr, to możemy kolumny wypełnić zerami: 1 1 1 1 1 110 0001111 1011111 110 (2) 1111 (2) = 1011111 (2) (110 (10) 15 (10) = 95 (10) ). Oto kilka dalszych przykładów: 1 1 1 1 1 1 1 10000000 00000001 01111111 1 1 1 1 11110000 00001111 11100001 1 1 1 1 10101010 01010101 01010101 Przy odejmowaniu również może dochodzić do nieprawidłowych sytuacji. Jeśli od liczby mniejszej odejmiemy większą, to wynik będzie ujemny. Jednakże w naturalnym systemie binarnym nie można zapisywać liczb ujemnych. Zobaczmy zatem co się stanie, gdy od liczby 0 odejmiemy 1, a wynik ograniczymy do 8 bitów: 11 1 1 1 1 1 1 00000000 00000001 11111111
Mnożenie dwójkowe Naukę mnożenia binarnego rozpoczynamy od tabliczki mnożenia. Bez paniki jest ona równie prosta jak podane powyżej tabliczki dodawania i odejmowania. 0 0 =0 0 1 =0 1 0 =0 1 1 =1 Tabliczka mnożenia binarnego (podobnie jak w systemie dziesiętnym) posłuży do tworzenia iloczynów częściowych cyfr mnożnej przez cyfry mnożnika. Iloczyny te następnie dodajemy wg opisanych zasad i otrzymujemy wynik mnożenia. Pomnożyć binarnie liczbę (2) przez 1011 (2). Obie liczby umieszczamy jedna pod drugą tak, aby ich cyfry znalazły się w kolumnach o tych samych wagach: 1011 Każdą cyfrę mnożnej mnożymy przez poszczególne cyfry mnożnika zapisując wyniki mnożeń w odpowiednich kolumnach tak samo postępujemy w systemie dziesiętnym, a tutaj jest nawet prościej, gdyż wynik mnożenia cyfry przez cyfrę jest zawsze jednocyfrowy: 1011 0000 Zwróć uwagę, iż wynikiem mnożenia mnożnej przez cyfrę mnożnika jest powtórzenie mnożnej z przesunięciem o pozycję cyfry (cyfra mnożnika 1) lub same zera (cyfra mnożnika 0). Spostrzeżenie to bardzo ułatwia konstrukcję układów mnożących. Puste kolumny uzupełniamy zerami i dodajemy do siebie wszystkie cyfry w kolumnach. Uważaj na przeniesienia. 1011 000 000
+000 1 0001111 Sprawdź, czy otrzymany wynik jest poprawny. Oto kilka dalszych przykładów: 101 111 101 101 +101 1 00011 1011 110 0000 1011 +1011 1 000010 111 111 111 111 +111 1 10001 Dzielenie dwójkowe Dzielenie binarne jest najbardziej skomplikowaną operacją arytmetyczną z dotychczas opisywanych. Wymyślono wiele algorytmów efektywnego dzielenia, ale dla potrzeb tego opracowania wystarczy znany wam algorytm szkolny, który polega na cyklicznym odejmowaniu odpowiednio przesuniętego dzielnika od dzielnej. W systemie dwójkowym jest to szczególnie proste, ponieważ dzielnika nie musimy mnożyć. Podzielimy liczbę (2) przez 10 (2) (13 (10) : 2 (10) ). Przesuwamy w lewo dzielnik, aż zrówna się jego najstarszy, niezerowy bit z najstarszym, niezerowym bitem dzielnej. Nad dzielną rysujemy kreseczkę: dzielna 10 przesunięty dzielnik Porównujemy dzielną z dzielnikiem. Jeśli dzielna jest większa lub równa dzielnikowi, to odejmujemy od niej dzielnik. Ponad kreską na pozycji ostatniej cyfry dzielnika piszemy Jeśli dzielna jest mniejsza od dzielnika, to nie wykonujemy odejmowania, lecz przesuwamy dzielnik o 1 pozycję w prawo i powtarzamy opisane operacje. Jeśli w ogóle dzielnika nie da się odjąć od dzielnej (np. przy dzieleniu 7 przez 9), to wynik dzielenia wynosi 0, a dzielna ma w takim przypadku wartość reszty z dzielenia. W naszym przykładzie odejmowanie to jest możliwe, zatem: 1 pierwsza cyfra wyniku dzielenia dzielna 10 przesunięty dzielnik 0101 wynik odejmowania dzielnika od dzielnej
Dzielnik przesuwamy o jeden bit w prawo i próbujemy tego samego z otrzymaną różnicą. Jeśli odejmowanie jest możliwe, to nad kreską w następnej kolumnie dopisujemy 1, odejmujemy dzielnik od różnicy, przesuwamy go o 1 bit w prawo i kontynuujemy. Jeśli odejmowanie nie jest możliwe, to dopisujemy nad kreską 0, przesuwamy dzielnik o 1 bit w prawo i kontynuujemy. 110 wynik dzielenia dzielna 10 przesunięty dzielnik 0101 dzielna po pierwszym odejmowaniu przesuniętego dzielnika 10 przesunięty dzielnik 0001 dzielna po drugim odejmowaniu przesuniętego dzielnika 10 dzielnik na swoim miejscu, odejmowanie niemożliwe 0001 reszta z dzielenia Operacje te wykonujemy dotąd, aż dzielnik osiągnie swoją pierwotną wartość. Pozostała dzielna jest resztą z dzielenia. Oczywiście w tym momencie możemy dalej kontynuować odejmowanie wg opisanych zasad otrzymując kolejne cyfry ułamkowe identycznie postępujemy w systemie dziesiętnym. Jednakże pozostawimy ten problem do rozwiązania bardziej ambitnym czytelnikom. W naszym przykładzie otrzymaliśmy wynik dzielenia równy: (2) : 10 (2) = 110 (2) i resztę 1 (2) (6 (10) i 1 (10) ) Jest to wynik poprawny, gdyż 2 mieści się w 13 sześć razy i pozostaje reszta Dla wprawki podzielmy liczbę 0 (2) przez 111 (2) (429 (10) przez 7 (10) ): 011 wynik dzielenia 0 : 111 111 nie da się odjąć, nad kreską 0 0 1100 101 100101 1001 111 nie da się odjąć, nad kreską 0 1001, koniec
10 reszta z dzielenia 0 (2) : 111 (2) = 11 (2) i reszta 10 (2) (429 (10) : 7 (10) = 61 (10) i reszta 2 (10) ). Ćwiczenia 11111 + 100 = 111 + 1001 =