Przeczytaj
Podobnie jak w przypadku różnych języków na przestrzeni lat powstawały różne systemy liczbowe. Najbardziej znany i codziennie wykorzystywany jest dziesiętny system liczbowy, a więc taki, w którym do zapisywania liczb używamy 10 różnych cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Jest to jeden z wielu systemów pozycyjnych, czyli metod zapisywania liczb tak, by pozycja cyfry w ciągu oznaczała wielokrotność potęgi liczby będącej podstawąpodstawą tego systemu. W przypadku dziesiętnego systemu liczbowego (ang. decimal numeral system) podstawą jest liczba 10, w związku z tym zapis „153” otrzymujemy obliczając sumę wartości na kolejnych pozycjach:
System dziesiętny a dwójkowy
Systemem używanym powszechnie w informatyce jest dwójkowy system liczbowy, nazywany również binarnym. Podobnie jak system dziesiętny, jest on systemem pozycyjnym. Do zapisania każdej liczby w tym systemie możemy użyć tylko dwóch cyfr: 0 i 1, a podstawą jest liczba 2.
Jak w takim razie zinterpretować „153” w systemie binarnym, skoro do dyspozycji mamy tylko dwie cyfry 0 i 1?
Musimy dokonać konwersji tej liczby pomiędzy dwoma systemami. Taką operację możemy porównać do tłumaczenia słowa z jednego języka na inny.
Podczas pracy z różnymi systemami liczbowymi łatwo się pomylić, dlatego często obok liczby zapisuje się, w jakim systemie jest ona zapisana. Przykładowo 10 w systemie dziesiętnym oznacza zupełnie inną liczbę w systemie dwójkowym.
Funkcje wbudowane
Większość języków programowania posiada gotowe funkcje do przeprowadzania konwersji pomiędzy różnymi systemami liczbowymi. W języku Python możemy wykorzystać wbudowaną funkcję bin( ).
Wykorzystaj kod napisany poniżej i sprawdź, jakie wyniki otrzymasz dla różnych liczb.
Python, tak jak wiele innych języków, używa prefiksów do oznaczania systemów liczbowych innych niż dziesiętne, dlatego wynik podany w systemie binarnym zawsze zaczyna się od znaków „0b”.
Wiemy już zatem, jak zaprezentować naszą liczbę w systemie binarnym:
Czy potrzebna jest nam zatem wiedza, jak dokonywać konwersji ręcznie? Wiedza ta może przydać się między innymi podczas programowania mikrokontrolerówmikrokontrolerów, ale również posłuży nam jako podstawa do nauki bardziej skomplikowanych systemów liczbowych używanych w informatyce.
Konwersja
„Tłumaczenie” liczby dziesiętnej zaczynamy od poszukiwania największej potrzebnej wielokrotności podstawy systemu, czyli 2.
Wypiszmy kolejne potęgi liczby 2:
Widzimy zatem, że nasza liczba 153Indeks dolny (10)(10) znajduje się w następującym przedziale:
To oznacza, że żeby zapisać liczbę 153Indeks dolny (10),(10), będziemy potrzebować aż 8 cyfr w systemie dwójkowym.
Istnieje wzór matematyczny, dzięki któremu możemy policzyć, ile cyfr potrzebnych nam będzie do zapisania danej cyfry:
Gdzie n jest liczbą, którą próbujemy zapisać.
Zatem z tego wzoru możemy policzyć, że dla naszej liczby 153:
Ponieważ nie możemy wykorzystać tylko fragmentu cyfry, sięgamy do pierwszej liczby całkowitej, która zmieści w sobie ten wynik i otrzymamy odpowiedź – potrzebujemy 8 cyfr.
Analogiczne do systemu dziesiętnego musimy sprawdzić, jaka wielokrotność potęgi dwójki pojawi się na danej pozycji. W przypadku systemu dwójkowego zadanie jest ułatwione, ponieważ każda pozycja może przyjąć tylko dwie wartości: 0 i 1. Zaczynając od najwyżej wartości widzimy zatem, że:
Pierwszą cyfrą naszej liczby w systemie binarnym jest zatem 1. Odejmijmy tę wartość od początkowej liczby, żeby zobaczyć, jaka jest pozostała wartość, którą potrzebujemy przekonwertować.
Ponieważ w wartości 25 nie jesteśmy w stanie „zmieścić” kolejnej potęgi o wartości 64, ta pozycja przyjmie wartość 0. Ta sama sytuacja powtórzy się w przypadku następnej pozycji o wartości 32, więc ta pozycja również przyjmie wartość 0.
Kolejna potęga, czyli 2Indeks górny 44 ma wartość 16, 25 jest większe od 16 więc:
Teraz odejmijmy tę wartość od 25 i otrzymamy:
W następnym kroku stwierdzamy, że 9 jest większe od kolejnej potęgi, czyli 2Indeks górny 33, zatem wykonajmy znane nam już czynności:
Dokończmy obliczenia dla pozostałych cyfr:
Widzimy, że po zapisaniu cyfry na ostatniej pozycji pozostała wartość wyniosła zero. Oznacza to, że udało nam się poprawnie dokonać konwersji pomiędzy systemem dziesiętnym i dwójkowym. Wykonane operacje możemy zatem zapisać jako następującą sumę:
Optymalizacja
Skoro wykonywane obliczenia są powtarzalne, chcąc dokonać konwersji pisząc algorytm można wykorzystać pętlę. Możemy zauważyć, że wykonując obliczenia w przypadku liczby 153Indeks dolny (10)(10) dzieliliśmy je poprzez kolejne potęgi liczby 2, aby sprawdzić, czy się w nich „zmieszczą”. Przyjrzyjmy się zatem, jak wyglądałby początek konwersji, jeśli użyjemy tej metody:
Liczba w części całkowitej prawidłowo wskazuje wartości kolejnych pozycji w systemie binarnym. Wciąż mamy jednak część dziesiętną, która przechowuje wartościowe informacje. Dlaczego? Spójrzmy na poniższe działania zapisane w postaci ułamków prostych:
Możemy zauważyć, że część ułamkowa, będąca resztą z dzielenia, zawiera w sobie informację potrzebną nam w kolejnym kroku działania, a część dziesiętna zawiera kolejne cyfry rozwinięcia binarnego.
Do znajdowania kolejnych cyfr liczby w systemie dwójkowym możemy wykorzystać działanie modulo 2, czyli obliczanie reszty z dzielenia przez podstawę systemu liczbowego.
Nasz algorytm możemy zapisać przy pomocy następującego pseudokodu:
Gdzie n jest konwertowaną liczbą dziesiętną, mod operacją wyznaczania reszty z dzielenia, a znak „/” oznacza dzielenie całkowite.
Słownik
nazywana też bazą systemu liczbowego. Podstawa określa ilość cyfr dostępnych do zapisywania liczb w danym systemie oraz służy do wyznaczania cyfr na poszczególnych pozycjach.
układ cyfrowy z mikroprocesorym zawarty w jednym układzie scalonym. Tego typu układy są powszechnie używane między innymi w sprzęcie RTV i AGD, urządzeniach podłączanych do komputerów (takich jak urządzenia peryferyjne czy karty rozszerzeń) i układach pomiarowych