Parę słów o systemach liczbowych

Jeśli miałeś do czynienia z programowaniem (np. w języku VBA), być może spotkałeś się z binarnym (dwójkowym) albo heksadecymalnym (szesnastkowym) systemem liczbowym. Nawet jeśli nie jesteś programistą to też zdarza nam się korzystać z innych systemów liczbowych. Czasem może nieświadomie używałeś szesnastkowego systemu liczbowego w następujących sytuacjach:

  • Wpisując kod koloru w języku znaczników HTML (lub w arkuszu stylów CSS)
  • Wklepując kod koloru w programie graficznym np. Photoshop
  • Wpisując kod znaku Unicode
  • Edytując pliki w edytorze plików binarnych aby np. zwiększyć liczbę żyć w zapisie gry albo zdjąć jakieś zabezpieczenie 😉

Uwaga: jeśli nie interesują Ciebie szczegóły techniczne dotyczące pozycyjnych systemów liczbowych a jedynie chcesz szybko przeliczyć liczbę z jednego systemu liczbowego na drugi zapoznaj się z tym artykułem.

System dziesiętny (dec, decymalny)

Tym systemem posługujemy się na co dzień. Do zapisu liczby używamy cyfr od 0 do 9.

Spójrz na następujące liczby:

215

152

521

W każdej z powyższych liczb cyfra 5 znajduje się w różnych miejscach. W zależności od położenia cyfra 5 spełnia różną rolę. W pierwszym przykładzie cyfra 5 oznacza pięć jednostek, w drugim pięć dziesiątek (pięćdziesiąt jednostek) a w trzecim pięć setek (pięćset jednostek). Ponieważ znaczenie cyfry 5 na każdej pozycji jest inne więc mamy do czynienia z pozycyjnym systemem liczbowym. Każdej pozycji cyfry 5 jest przypisana inna waga. Podstawą systemu dziesiętnego jest liczba 10. W każdym pozycyjnym systemie liczbowym zachodzi następująca zależność pomiędzy wagą danej pozycji a podstawą:

Gdzie:
w – waga pozycji
p – podstawa systemu
k – pozycja

Na pierwszy rzut oka ten wzór zbyt wiele nam nie mówi. Ale spróbujmy go zrozumieć na prostym przykładzie. Mamy przykładowo liczbę 215. Możemy tę liczbę zapisać jako:

Każda z cyfr w naszej liczbie 215 ma inną wagę. Pierwsza cyfra (licząc od prawej) ma wagę 100 druga ma wagę 101 a trzecia 102.

System dwójkowy (binarny)

Binarny system liczbowy jest naturalnym systemem liczbowym dla komputerów. W tym systemie używamy tylko dwóch cyfr: 0 i 1. Możemy (w pewnym uproszczeniu) sobie wyobrazić, że kiedy płynie prąd to komputer traktuje ten stan jako 1 a gdy prąd nie płynie to ten stan jest taktowany jako 0.

Korzystając z wcześniej poznanego wzoru: w = pk przeliczmy przykładową liczbę z systemu binarnego na dziesiętny. Niech to będzie liczba 101010.

Czyli nasza liczba 101010 w systemie binarnym to liczba 42 w systemie dziesiętnym.

A teraz przeliczmy w drugą stronę tj. z systemu dziesiętnego na binarny. Algorytm jest dość prosty: cały czas dzielimy naszą liczbę przez 2 aż do osiągnięcia zera. Czyli:

aktualna liczbacałkowita część z dzielenia przez 2reszta z dzielenia
42210
21101
1050
521
210
101

Interesuje nas kolumna reszta z dzielenia. Jeśli po kolei odczytamy (OD DOŁU!) kolejne reszty z dzielenia otrzymamy naszą liczbę 42 w systemie binarnym czyli 101010

System szesnastkowy (heksadecymalny)

W systemie szesnastkowym mamy aż 16 różnych cyfr. Jak zapewne się orientujesz – w systemie dziesiętnym mamy do czynienia z 10 cyframi (od 0 do 9). Na potrzeby brakujących 6 cyfr w systemie szesnastkowym zaadoptowano sześć pierwszych liter alfabetu: A=10, B=11, C=12, D=13, E=14 i F=15.

Zgodnie ze wzorem w = pk przeliczymy przykładową liczbę z systemu szesnastkowego na dziesiętny. Niech to będzie jakaś zabawna liczba np. BEEF (ang. wołowina).

11*16^3 + 14*16^2 + 14*16^1 + 15*16^0 = 48879

Aby przeliczyć liczbę 48 879 z systemu dziesiętnego na system szesnastkowy postępujemy tak samo jak w przypadku konwersji liczby z systemu dziesiętnego na binarny z tym, że naszą liczbę dzielimy przez 16 do czasu aż nie dojdziemy do zera.

aktualna liczbacałkowita część z dzielenia przez 16reszta z dzielenia
488793054  15 (F)
3054190  14 (E)
19011  14 (E)
110  11 (B)

I znów odczytujemy naszą resztę z dzielenia OD DOŁU!. Oczywiście jeśli reszta z dzielenia wyjdzie większa od 9 to należy przypisać takiej liczbie odpowiednią literę.

System szesnastkowy dość powszechnie używany gdyż w tej postaci bardzo łatwo można zapisywać liczby binarne. Przykładowo mamy taką oto liczbę binarną 1011111011101111. Jak widzisz, dość ciężko jest tę liczbę zapamiętać. Jest pełno zer i jedynek przepisując taką liczbę łatwo o pomyłkę. Istnieje dość prosty sposób na zamianę liczb z systemu binarnego na heksadecymalny. Otóż wystarczy pogrupować cyfry w „czwórki” i każdej czwórce przypisać odpowiednią cyfrę z poniższej tabeli.

1011 1110 1110 1111 = BEEF

„czwórka cyfr” w systemie dwójkowymOdpowiadająca cyfra w systemie szesnastkowym
00000
00011
00102
00113
01004
01015
01106
01117
10008
10019
1010A
1011B
1100C
1101D
1110E
1111F

Jeśli w liczbie binarnej liczba cyfr nie jest podzielna przez 4 to należy naszą liczbę binarną uzupełnić o odpowiednią liczbę zer wiodących. Np. mamy taką oto liczbę binarną: 1111011.

111 1011 => 0111 1011 = 7B

W analogiczny sposób można przekonwertować liczbę z systemu heksadecymalnego na binarny – po prostu bierzemy daną cyfrę z systemu szesnastkowego, wyszukujemy ją w drugiej kolumnie z powyższej tabeli i odczytujemy odpowiednią „czwórkę” z pierwszej kolumny np.

1A = 0001 1010

System ósemkowy (oktalny)

System ten w porównaniu np. do systemu szesnastkowego nie jest tak często wykorzystywany w informatyce, ale z kronikarskiego obowiązku o nim wspomnę. Przeliczanie liczb z systemu dwójkowego na ósemkowy działa na tej samej zasadzie co w przypadku systemu szesnastkowego z tym, że grupujemy po 3 cyfry.

Przykładowo: mamy liczbę binarną 101010 po pogrupowaniu jej w trójki (i ewentualnym dopisaniu z przodu zer wiodących) mamy 101 010 po odczytaniu odpowiednich trójek z tabeli otrzymujemy liczbę 52 w systemie ósemkowym.

„trójka cyfr” w systemie dwójkowymOdpowiadająca cyfra w systemie ósemkowym
0000
0011
0102
0113
1004
1015
1106
1117
Ten wpis został opublikowany w kategorii Pozostałe i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.