Twój email:




dowiedz się więcej >> 

Arytmetyka kodów 24.10.2009.
autor : typ

Arytmetyka kodów

Często nie zdajemy sobie sprawy, że procesor w naszym komputerze sterowany jest za pomocą prostych sygnałów, a mianowicie kodu dwójkowego, czyli binarnego – ciągu zer i jedynek. Dla większości już samo zrozumienie tego jest „czarną magią”, a tu nasza maszynka porozumiewa się także i drugim językiem, kodem szesnastkowym znanym jako Heksadecymalny (Hex). Chciałbym więc przybliżyć wszystkim zainteresowanym obydwa rodzaje kodów, i pokazać że tak naprawdę nie ma w tym nic trudnego! Jednak praktycznie zawsze operuje się tu dużymi liczbami, więc bardzo pożądany jest kalkulator z dużą ilością cyfr na wyświetlaczu. Przy przerabianiu tych tematów w szkołach przeważnie wymagane jest aby każdy uczeń miał ze sobą kalkulator.

Przeliczanie z systemu dziesiętnego na binarny

Mądre podręczniki podają równie mądre i bardzo długie wzory przeliczeń. Jednak jest o wiele prostszy sposób. Kod binarny z systemu dziesiętnego uzyskamy dzieląc wybraną liczbę na 2. Zaprezentuję to na prostym przykładzie. Warto wziąć kalkulator i kartkę do ręki żeby śledzić i sprawdzać przebieg – pomaga to zrozumieć. A więc dla przykładu weźmy jakąś datę, np. datę przystąpienia do prac nad MH:

10.03.2006r

Zapisujemy ją bez kropek:

10032006

Teraz dzielimy ją na 2:

10032006 : 2 = 5016003

W tym dzieleniu nie uzyskaliśmy reszty, czyli spisujemy 0. Teraz podzielmy wynik poprzedniego działania:

5016003 : 2 = 2508001.5

Tutaj uzyskaliśmy już resztę. W takim razie zapisujemy pod poprzednim zerem jedynkę. Teraz ponownie dzielimy wynik, „ucinamy” jednak resztę, czyli dzielimy 2508001 na 2

2508001 : 2 = 1254000.5

Ponownie uzyskaliśmy resztę, więc spisujemy 1. Kontynuujmy:

1254000 : 2 = 627000 reszta: 0
627000 : 2 = 313500 reszta: 0
313500 : 2 = 156750 reszta: 0
156750 : 2 = 78375 reszta: 0
78375 : 2 = 39187 reszta: 1
39187 : 2 = 19593 reszta: 1
19593 : 2 = 9796 reszta: 1
9796 : 2 = 4898 reszta: 0
4898 : 2 = 2449 reszta: 0
2449 : 2 = 1224 reszta: 1
1224 : 2 = 612 Rest: 0
612 : 2 = 306 reszta: 0
306 : 2 = 153 reszta: 0
153 : 2 = 76 reszta: 1
76 : 2 = 38 reszta: 0
38 : 2 = 19 reszta: 0
19 : 2 = 9 reszta: 1
9 : 2 = 4 reszta: 1
4 : 2 = 2 reszta: 0
2 : 2 = 1 reszta: 0
1 : 2 = 0 reszta: 1

Teraz spiszmy wszystkie te zera i jedynki. Uwaga! Spisujemy „od tyłu”. Otrzymany kod:

100110010001001110000110

Teraz wypadało by go podzielić na coś łatwiejszego do dalszych przekształceń. Grupujemy więc cyfry po cztery. Uwaga! Zaczynamy od prawej strony! Teraz otrzymaliśmy:

1001 1001 0001 0011 1000 0110

Przekształcenie z kodu dwójkowego na szesnastkowy

Teraz ponownie uprościmy kod. Mianowicie zmienimy go z binarnego na szesnastkowy. Jest to bardo proste. Wcześniej podzieliliśmy ciąg zer i jedynek na grupy po cztery znaki.

Tak więc: 0001 oznacza 1, 0010 oznacza 2, 0011 oznacza 3… Czy musimy to znać na pamięć? Nie! Jako że kod dwójkowy oparty jest na wielokrotnościach cyfry 2 „rozkodowanie” wygląda w następujący sposób: pierwsze cyfra od prawej oznacza 2 do potęgi 0 czyli 1. Jeśli w tym miejscu mamy wpisane 1, liczymy jedynkę – jeśli zero nie liczymy jej. Druga cyfra oznacza 2 do potęgi 1, czyli 2 – i analogicznie – jeśli jest tu 1, liczymy dwójkę, a jeśli nie – nie liczymy. Następnie jest 2 do potęgi 2 (czyli 4), oraz 2 do potęgi 3 czyli 8. Jeszcze prościej:

1001=
1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1*8 + 0*4 + 0*2 + 1*1= 8 + 1 = 9

Takim oto sposobem uzyskaliśmy z 1001B (Binarnej) 9Hex (Heksadecymalnej). Z tych czterech cyfr możemy uzyskać maksymalnie liczbę 15 (1111 = 8 + 4 + 2 + 1 = 15). Z tym, że od 10 do 15 nie zapisujemy już liczbami a za pomocą wielkich liter od A do F (ABCDEF). Dokładnie rozpisane jest to w tabelce na końcu artykułu.

Tak więc przeliczmy teraz nasz kod binarny na szesnastkowy:

1001 = 9
1001 = 9
0001 = 1
0011 = 3
1000 = 8
0110 = 6

Czyli 100110010001001110000110B = 991386Hex (zawsze na końcu dopisujmy z jakiego kodu jest to liczba! D – dziesiętny, B – Binarny, Hex – Heksadecymalny). Zamiana w drugą stronę jest analogiczna – po prostu zapisujemy cyfrę (np. 9) w postaci binarnej (dla 9 jest to 1001)

Przeliczanie z kodu szesnastkowego na dziesiętny

Tutaj łatwo wpaść w panikę – jak z jakiejś mieszanki liter i cyfr uzyskać liczbę dziesiętną?! Na szczęście i to nie jest takie skomplikowane jak się wydaje za pierwszym, a czasem i za drugim rzutem oka :) Należy przede wszystkim pamiętać o dwóch rzeczach. Po pierwsze – jaka cyfra odpowiada jakiej literze (czyli 10 to jest A, 11 to jest B itd.), oraz że w systemach komputerowych potęgowanie zaczynamy od 0.

A więc weźmy naszą zakodowaną datę: 991386Hex

Obliczamy to w następujący sposób:

9*16^5 + 9*16^4 + 1*16^3 + 3*16^2 + 8*16^1 + 6*16^0 =
9*1048576 + 9*65536 + 1*4096 + 3*256 + 8*16 + 6*1 =
9437184 + 589824 + 4096 + 768 + 128 + 6 =
10032006

Czyli z powrotem uzyskaliśmy datę 10.03.2006r czyli dzień rozpoczęcia prac nad MH. Widać tutaj ogromne podobieństwo pomiędzy przeliczaniem z binarnego na dziesiętny a przeliczaniem z szesnastkowego na dziesiętny. Zasada jest dokładnie ta sama z tą różnicą że zamiast wielokrotności dwójki mamy wielokrotności szesnastki.

Przeliczanie z dziesiętnego na szesnastkowy

Tu trzeba włożyć trochę więcej wysiłku niż w przeliczaniu z dziesiętnego na binarne. Choć wygląda to podobnie, to jest to trochę trudniejsze.

Tak więc przejdźmy od razu do obliczeń. Ponownie użyjemy tej samej daty co poprzednio.

10032006

Dzielimy to na 16. Otrzymujemy 627000.375. Przepisujemy wynik bez reszty pod poprzedni. Teraz mnożymy go razy 16. Otrzymamy 10032000 – różnicę 10032006 i 10032000 (czyli 6) zapisujemy. Teraz dzielimy 627000 przez 16. Otrzymujemy 39187.5, zapisujemy bez reszty i mnożymy razy 16, otrzymujemy 626992. Różnica wynosi tym razem 8 (627000 – 626992 = 8). Zapisujemy 8 jako wynik i liczymy dalej. Poniżej podam same wyniki:

39187 (3)
2449 (1)
153 (9)
9 (9) (9 dzielone na 16 daje 0 z resztą. Zero razy 16 jest równe 0. A różnica pomiędzy 9 i 0 wynosi 9. Dalej nie dzielimy, ponieważ wyniki są już „po przecinku”).

A więc otrzymaliśmy znowu 991386Hex.

Kod BCD

Kod binarny który poznaliśmy na początku jest kodem NKB, czyli jest to Naturalny Kod Binarny. Istnieje także drugi kod, znacznie prostszy – BCD, z którego korzystają niektóre maszyny. Nie przeliczamy w nim całych liczb (np. 123D = 1111011), ale każdą liczbę osobno (1 = 0001; 2 = 0010; 3 = 0011).

Tabela kodów

Oto tabelka, która pokazuje jaka cyfra systemu dziesiętnego odpowiada jakiej cyfrze systemu szesnastkowego oraz jakiej kombinacji systemu binarnego.

System dziesiętnySystem binarnySystem szesnastkowy
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F

Nietrudno zauważyć tu pewną prawidłowość w przypadku systemu binarnego:

  1. Ostatnia kolumna to zawsze powtarzające się 01;
  2. Przedostatnia kolumna to powtarzająca się kombinacja 0011;
  3. Trzecia kolumna od końca to kolejna kombinacja: 4 zera, 4 jedynki, 4 zera, 4 jedynki;
  4. Czwarta kolumna od końca to osiem zer a po nich osiem jedynek;
W ten sposób łatwo jest zapamiętać sobie tą tabelkę.

[Podziękowania dla harhar’a za pomoc przy znalezieniu błędu w obliczeniach :) ]

Tę stronę najlepiej
przeglądać w
rozdzielczości 1024x768
lub większej, używając przeglądarki
Mozilla Firefox.
Dziś jest: 21.11.2024.
Strona działa 6507 dni


Action-Games - od graczy, dla graczy...

Darmowe domeny, darmowy hosting...

Polska strona o serii GTA...

Kolejny polski serwis o Grand Theft Auto...

© Copyright 2007 - 2009
Theme : Deamon-X | PHP : may_cry | Help & stuff : typ
:: mini HACKERS site ::