✖

Zamiana systemów liczbowych

Jak zamieniać liczby z systemu dziesiętnego na inne systemy i odwrotnie – z innych systemów na system dziesiętny.

Czym jest system liczbowy

Na co dzień pracujemy w systemie dziesiętnym. Ten system ma dziesięć cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8 i 9. Charakterystyczne dla systemu dziesiętnego jest to, że gdy jakąś liczbę, na przykład 57, pomnożymy przez dziesięć, przesuniemy się o jeden rząd – do zapisania tej liczby potrzebujemy o jedną cyfrę więcej: 570.

Możemy mieć też inne systemy liczbowe. Na przykład system ósemkowy zawierałby tylko cyfry 0, …, 7. Wyrażenie 7 + 1 byłoby więc równe liczbie 10, bo w systemie ósemkowym nie mamy cyfry 8. System szesnastkowy miałby cyfry 0, 1, … 14, 15. Zamiast cyfr większych od 9 używamy czasem liter, więc system szesnastkowy miałby cyfry 0, …9, A, B, C, D, E, F.

Z innymi systemami liczbowymi spotykamy się, co zaskakujące, także w życiu codziennym. Weźmy na przykład czas – sekundy i minuty liczymy w systemie sześćdziesiątkowym. Każdą chwilę dnia możemy zapisać jako trzycyfrową liczbę w systemie sześćdziesiątkowym. Pierwsza cyfra podaje godziny, druga minuty, trzecia sekundy. Jeśli jako separator cyfr wybierzemy dwukropek, mamy na przykład liczbę 14:05:59. Zauważ, że gdy do tej godziny dodamy jedną sekundę, nie otrzymamy godziny 14:05:60, tylko 14:06:00 – bo 60 nie jest poprawną cyfrą systemu sześćdziesiątkowego.

Zamiana z systemu dziesiętnego na dwójkowy

Załóżmy, że mamy na kartce liczbę 70. Chcemy ją teraz zamienić na system dwójkowy, czyli binarny. Zasada jest dość prosta: liczbę, którą chcemy zamienić, dzielimy cały czas przez dwa, aż dojdziemy do zera, i zapisujemy przy tym reszty z dzielenia całkowitego. Jeśli chcemy zamienić liczbę na inny system, na przykład szesnastkowy, będziemy dzielić przez szesnaście. Jeśli na szóstkowy, dzielimy przez sześć. W praktyce wygląda to tak:

$$\begin{eqnarray} 70 : 2 &= 35 & \longrightarrow 0 \quad(\mbox{reszta z dzielenia})\\ 35 : 2 &= 17 & \longrightarrow 1\\ 17 : 2 &= 8 & \longrightarrow 1\\ 8 : 2 &= 4 & \longrightarrow 0\\ 4 : 2 &= 2 & \longrightarrow 0\\ 2 : 2 &= 1 & \longrightarrow 0\\ 1 : 2 &= 0 & \longrightarrow 1 \end{eqnarray}$$

Wynikową liczbę w systemie dwójkowym tworzą reszty z dzielenia. Nie czytamy ich jednak od góry, tylko od dołu. Liczba 70 w systemie binarnym to więc 1000110.

Zamiana z systemu dwójkowego na dziesiętny

W drugą stronę zamieniamy tak. Weźmy liczbę 1100010 i zamieńmy ją na system dziesiętny. Ten kierunek jest prostszy, wystarczy obliczyć taką sumę:

$$ 1100010_{2} = 1\cdot2^{6}+1\cdot2^{5}+0\cdot2^{4}+0\cdot2^{3}+0\cdot2^{2}+1\cdot2^{1}+0\cdot2^{0} $$

Każdy składnik ma postać x · 2i, gdzie x to cyfra z wyjściowej liczby binarnej, a i, licząc od prawej, za każdym razem zwiększa się o jeden. Ponieważ zamieniamy liczbę 1100010, ta suma wygląda tak:

$$ 1100010_{2} = \fbox{1}\cdot2^{6}+\fbox{1}\cdot2^{5}+\fbox{0}\cdot2^{4}+\fbox{0}\cdot2^{3}+\fbox{0}\cdot2^{2}+\fbox{1}\cdot2^{1}+\fbox{0}\cdot2^{0} $$

Liczba 1100010 ma siedem cyfr, więc wykładniki przy dwójce będą kolejno 6, 5, …, 1, 0. Po potęgowaniu i mnożeniu otrzymamy wyrażenie:

$$ 1100010_{2} = 64 + 32 + 2 = 98. $$

Dlaczego ten sposób działa?

Możemy to pokazać na systemie dziesiętnym. Co tak naprawdę oznaczają cyfry w liczbie, na przykład w liczbie 7384? Cyfra 4 podaje liczbę jedności, cyfra 8 liczbę dziesiątek, cyfra 3 liczbę setek, a cyfra 7 liczbę tysięcy. Możemy więc napisać, że

$$ 7384 = 7\cdot 1000 + 3\cdot100 + 8\cdot 10 + 4\cdot 1 $$

To wyrażenie możemy jeszcze przekształcić tak, żeby zamiast liczb 100, 10 i 1 była w nim zawsze jakaś potęga dziesięciu. Ponieważ 100 = 1, 101 = 10 itd., możemy napisać

$$ 7384 = 7\cdot 10^3 + 3\cdot10^2 + 8\cdot 10^1 + 4\cdot 10^0 $$

W ten sam sposób potrafimy opisać każdą liczbę w systemie dziesiętnym, przy czym poszczególne składniki mają postać x · 10i, gdzie x jest cyfrą od 0 do 9 – tych cyfr jest dziesięć. Wartość i jest jakąś nieujemną liczbą całkowitą, która określa rząd. Jeśli i = 0, składnik podaje jedności, jeśli i = 2, podaje setki (bo 102 = 100).

Spróbujmy teraz zamienić liczbę 7348 z systemu dziesiętnego na, ee…, system dziesiętny. To będzie miało sens. Liczbę 7348 będziemy dzielić przez 10:

$$\begin{eqnarray} 7348 : 10 &= 734 & \longrightarrow 8 \quad(\mbox{reszta z dzielenia})\\ 734 : 10 &= 73 & \longrightarrow 4\\ 73 : 10 &= 7 & \longrightarrow 3\\ 7 : 10 &= 0 & \longrightarrow 7\\ \end{eqnarray}$$

Jeśli odczytamy reszty od dołu, mamy liczbę 7348 – z powrotem wyjściową liczbę, którą próbowaliśmy zamienić na… ten sam system.

Jeśli chcemy opisać system dwójkowy, robimy to dokładnie tak samo – wszystkie składniki będą miały postać x · 2i, gdzie x jest cyfrą 0 albo 1. Wartość i znowu określa rzędy. Tak jak kolejne dzielenie przez dziesięć daje nam cyfry kolejnych rzędów liczby w systemie dziesiętnym, tak kolejne dzielenie przez dwa daje nam cyfry kolejnych rzędów w systemie dwójkowym.

Zauważ też, że gdy dzielimy liczbę przez dziesięć i pytamy o resztę, ta reszta zawsze będzie w przedziale <0, 9>. Jeśli dzielimy liczbę przez dwa, reszta może wynosić 0 albo 1.

Zamiana na inne systemy

Poprzedni sposób zamiany z systemu dziesiętnego na binarny jest na tyle uniwersalny, że da się go użyć także dla innych systemów. Jeśli chcemy zamienić liczbę 185 na system szesnastkowy, po prostu dzielimy przez 16:

$$\begin{eqnarray} 185 : 16 &= 11 &\longrightarrow 9\quad(\mbox{reszta z dzielenia})\\ 11 : 16 &= 0 &\longrightarrow 11 \end{eqnarray}$$

Liczba 185 miałaby w systemie szesnastkowym postać (11, 9). Zamiast „cyfr” większych od 9 używa się zwykle liter, czyli 10 = A, 11 = B, 12 = C, … Możemy więc napisać, że liczba 185 ma w systemie szesnastkowym postać B9.

Podobnie możemy zamienić liczbę B9 z systemu szesnastkowego na dziesiętny.

$$ B9_{16} = 11\cdot 16^1 + 9\cdot 16^0 = 11\cdot16+9=185 $$