PROGRAMMING

Systemy liczbowe

Wstęp.

Jak już pisałem w jakimś artykule komputer posługuje się systemem dwójkowym, czyli same 0 i 1, np. 1110001. My w rzeczywistym świecie posługujemy się systemem dziesiętnym, składającym się z cyfr od 0 do 9. I tak we wszystkich systemach, np. w systemie szestnastkowym posługujemy się liczbami od 0 - 15 (zauważ, że nie od 1 - 16, bo numerowanie zaczyna się od 0!).

Przekształcanie systemów.

Ok, teraz pokaże jak zamienić system dwójkowy na dziesiętny. Weźmy sobie np. 101100. Jak widać jest to system dwójkowy. Aby to zamienić na dziesiętny należy każdą cyfrę pomnożyć przez 2 (bo system dwójkowy) do kolejnej potęgi, zaczynając oczywiście od prawej strony, czyli:

101100 = 0 * 2^0 + 0 * 2^1 + 1 * 2^2 + 1 * 2^3 + 0 * 2^4 + 1 * 2^5 = 0 + 0 + 4 +
8 + 0 +32 = 44

(^ oznacza potęge, np. 2^0 to 2 do potęgi 0) Takim sposobem z systemu dwójkowego mamy system dziesiętny. Teraz wyjaśnienie jeżeli ktoś nie zrozumiał ;-) Zaczynamy liczenie od prawej strony. Czyli od zera. Jest to system dwójkowy, więc wszystko mnożymy przez 2. A co z potęgami ? Proste, potęga jest “numerem” cyfry licząc od prawej. I uwaga! Liczenie zaczynamy zawsze od 0! Czyli dla naszego przykładu:

cyfra: 1 0 1 1 0 0
numer: 5 4 3 2 1 0

Mam nadzieje, że napisałem jasno ;-) Więc bierzemy pierwszą cyfre, czyli 0, mnożymy ją razy 2 (bo system dwójkowy) do potęgi 0. Następnie jest 1 razy 2 do potęgi 1 itd.

Teraz zamienimy sobie liczbę dziesiętną na dwójkową. Weźmy sobie 44, żeby pokazać, że wyjdzie nasza wyżej wymieniona liczba dwójkowa. Aby to przekształcić dzielimy liczbę dziesiętną na 2 (bo chcemy system dwójkowy).

44 : 2 | 0
22 : 2 | 0
11 : 2 | 1
5  : 2 | 1
2  : 2 | 0
     1 | 1
     0 |

I wyjaśnienie. Liczbę dziesiętną dzielimy przez 2. Jeżeli z dzielenia zostaje reszta to wstawiamy 1, jeżeli reszty nie ma wstawiamy 0. Np. liczba 44 dzielona przez 2 wynosi 22, bez reszty, więc 0. Liczbę 22 dzielimy na 2 wychodzi 11, znowu bez reszty czyli 0. Liczbe 11 dzielimy na 2, i wychodzi hm, 5,5. Ale tak nie można! Nie może być liczb ułamkowych ;-) Jeżeli dzielimy liczbę 11 na 2, to wychodzą dwie piątki i reszta 1. Czyli jest reszta, więc wstawiamy 1. Do następnej linii przechodzi nam 5, dzielone na dwa… reszta jest (2 * 2 + 1), więc wstawiamy 1, a do następnej linii przechodzi 2 itd. Teraz bierzemy i czytamy liczby koniecznie od końca (u nas od dołu)! Czyli wychodzi 101100. Idealnie! ;-) Prawda, że proste? Oczywiście przedstawione przeze mnie metody zapisu tych obliczeń można sobie zmienić, jak komu wygodnie. Z innymi systemami jest tak samo. Jeżeli chcemy zmienić np. z systemu piątkowego (hm, brzmi jak system dnia tygodnia ;-D) na dziesiętny to kolejne cyfry (od prawej!) mnożymy przez 5 (bo piątkowy system) do potęgi… wiecie jakiej, jak wyżej ;-) Czyli np. zmieńmy liczbe 203 (system piątkowy) na system dziesiętny.

203 = 3 * 5^0 + 0 * 5^1 + 2 * 5^2 = 3 + 0 + 50 = 53

A teraz jeżeli byśmy chcieli zamienić spowrotem na system dziesiętny to dzielimy liczbe 53 na 5, tak samo jak to robiliśmy z systemem dwójkowym. I tak samo jest ze wszystkimi systemami.

System szesnastkowy.

Aha, mała wzmianka do systemu szesnastkowego, w zapisie tego stosuje się litery. Pod spodem podam co na jakie:

0 - 0
: - :
9 - 9
10 - A
11 - B
12 - C
13 - D
14 - E
15 - F

Czyli np. liczba 14 w zapisie szesnastkowym zamieniona jest na litere E. (trzeba pisać w literach, nie można napisać 16!)

Dodawanie systemów.

Arytmetyka dwójkowa, czyli operacje matematyczne. Możliwe są następujące operacje dodawania:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10

Oczywiście w systemie dwójkowym nie ma liczby 2, więc ostatnie wyrażenie trzeba zastąpić kombinacją zer i jedynek, więc 10. Dla przykładu pododajemy:

 1100000 (dziesiętnie 96)
+1010110 (dziesiętnie 86)
-------------------------
 10110110 (dziesiętnie 182)

To było proste. Teraz przykłady do przeanalizowania:

 10101
+10011
--------------
 101000

Lub np.

 11101
+ 1000
--------------
101110

Gdybyśmy chcieli dodać liczby zapisane np. systemem piątkowym to np.

 342
+231
--------------
1123

Dlaczego? Przeanalizujmy. Zacznijmy od tego, że jest to system piątkowy, więc mogą występować tylko liczby od 0 do 4. Więc tak, 2 + 1 = 3, 3 może być więc wpisujemy. 4 + 3 = 7, siedem to za duża cyfra. W siedmiu pięc mieści się tylko raz, więc wpisujemy reszte 2, a 1 (bo tyle jest piątek w siódemce) zapamiętujemy. 3 + 2 = 5, dzieląc 5 na 5 mamy 1, więc wpisujemy 1. Następnie wpisujemy 1, które nam zostało wcześniej z reszty i mamy wynik! Mam nadzieje, że zrozumiecie to co napisałem. Jak widać przypomina to obliczenia z pierwszej klasy podstawowej ;-)

Liczby dwójkowe ujemne

Hm, jeszcze napisze o liczbach dwójkowych ujemnych. Więc komputer do reprezentowania liczb ujemnych wykorzystuje “usupełnienie do dwóch”. Żeby zamienić liczbe na jej uzupełnienie do dwóch należy:

a) zamienić bity na przeciwne (zera na jedynki, a jedynki na zera) b) dodać 1.

Więc aby przedstawić liczbę -65, należy ją zmienić na uzupełnienie do dwóch w taki sposób:

01000001 (dziesiętnie 65)
10111110 (zamiania bitów)
      +1 (dodajemy 1)
10111111 (dziesiętnie -65)

A teraz spowrotem na dodatnią:

10111111 (dziesiętnie -65)
01000000 (zamiana bitów)
      +1
--------
01000001 (dziesiętne 65)

Ok, teraz to już chyba wszystko… Prawda, że nie jest to trudne? ;-)