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 liczba | całkowita część z dzielenia przez 2 | reszta z dzielenia |
42 | 21 | 0 |
21 | 10 | 1 |
10 | 5 | 0 |
5 | 2 | 1 |
2 | 1 | 0 |
1 | 0 | 1 |
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 liczba | całkowita część z dzielenia przez 16 | reszta z dzielenia |
48879 | 3054 | 15 (F) |
3054 | 190 | 14 (E) |
190 | 11 | 14 (E) |
11 | 0 | 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ójkowym | Odpowiadająca cyfra w systemie szesnastkowym |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
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ójkowym | Odpowiadająca cyfra w systemie ósemkowym |
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |