Mnożenie w słupku w systemie dwójkowym i skrót przez przesunięcie bitów – dlaczego mnożenie przez 2 to dopisanie zera.
Mnożenie binarne jest prostsze niż dziesiętne, bo tabliczka mnożenia ma tylko cztery wpisy i trzy z nich dają zero. Mnożąc przez 0, dostajemy 0; mnożąc przez 1, przepisujemy liczbę bez zmian.
Dlatego mnożenie w słupku sprowadza się do przepisywania i przesuwania. Dla każdej jedynki w mnożniku przepisujemy pierwszą liczbę, przesuniętą o tyle pozycji w lewo, na której ta jedynka stoi. Na koniec wszystko dodajemy binarnie.
Jest też skrót, który warto znać na pamięć: mnożenie przez 2 to dopisanie zera z prawej strony, a dzielenie przez 2 to skreślenie ostatniego bitu. To dokładnie ta sama zasada, co dopisywanie zera przy mnożeniu przez 10 w systemie dziesiętnym.
Mnożymy 101 razy 11, czyli 5 razy 3:
101101 przesunięte o jeden, czyli 1010101 plus 1010 daje 1111Wynik 1111 to 8 + 4 + 2 + 1 = 15. Zgadza się.
Dzielenie działa jak dzielenie pisemne: sprawdzamy, czy dzielnik mieści się w kolejnych fragmentach dzielnej, i zapisujemy 1 albo 0. Reszta zostaje na końcu.
Częściej niż samo mnożenie pytane jest przesunięcie bitowe, bo pojawia się w zadaniach programistycznych. Trzeba wiedzieć, że przesunięcie w lewo o n pozycji to mnożenie przez 2 do potęgi n, a w prawo – dzielenie całkowite.
Uwaga: przesunięcie w prawo gubi resztę. Liczba 7 przesunięta o jeden w prawo daje 3, nie 3,5 – to dzielenie całkowite.
Bo każdy bit przesuwa się o jedną pozycję w lewo, a każda pozycja w lewo ma dwa razy większą wagę. To ta sama logika, co dopisanie zera przy mnożeniu przez 10 w systemie dziesiętnym.
Dopisz trzy zera, bo 8 to 2 do potęgi 3. Analogicznie mnożenie przez 16 to cztery zera. Ten skrót działa tylko dla potęg dwójki.
Zasada jest ta sama, choć układy scalone robią to równolegle, a nie krok po kroku. Przesunięcia bitowe są jednak wyraźnie szybsze od pełnego mnożenia i kompilatory świadomie je podstawiają.
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: