Poruszymy sprawę przejścia pomiędzy podstawowymi postaciami ww. systemów, czyli dziesiętnego (D), dwójkowego (B), szesnastkowego (H) i oktalnego (O). Podstawowymi dlatego, że przykładowo system dwójkowy ma kilka odmian (1 z n, kod U2 itp.) z czego najczęściej używany jest NB (naturalny binarny). Rzecz jakich pełno w sieci, ale spróbuję to wytłumaczyć według mojego rozumienia, przy nabraniu drobnej wprawy można konwertować w pamięci liczby do tysiąca. W Internecie można również znaleźć gotowe kalkulatory (nawet windowsowy ma takie opcje), ale te podstawy warto umieć będąc odciętym od sieci, tudzież ucząc się w technikum elektronicznym.
Przejdźmy więc przez kolejne systemy liczbowe. Zakładam że każdy czytając ten artykuł orientuje się chociaż po części jak dane kody wyglądają. W nawiasach będą znajdowały się rodzaje systemów
Konwersja DEC -> BIN.
Całość sprowadza się do tego, że wybraną liczbę dzielimy na 2, za każdym razem zapisując reszty (wyniki dzielenia zaokrąglamy w dół do postaci całkowitej). Dla przykładu weźmy sobie liczbę 69:
69/2=34 r=1
34/2=17 r=0
17/2=8 r=1
8/2=4 r=0
4/2=2 r=0
2/2=1 r=0
1/2=0 r=1 dzielimy do momentu dzielenia 1/2.
Teraz wszystkie reszty zapisujemy odczytując je od dołu, czyli mamy 1000101(B). Jak sprawdzić czy wynik jest prawidłowy? W systemie dwójkowym każde zero lub jedynka ma swoją wagę, wynoszącą 2^n, gdzie n jest pozycją liczby licząc od prawej (począwszy od zera). Jeżeli nasza otrzymana liczba ma 7 bitów, wiemy że możemy na niej rozpisać 128 kombinacji zer i jedynek (2^7). Wracając do sprawdzenia – interesują nas tylko pozycje gdzie pojawiła się jedynka, czyli pierwsza, trzecia i siódma. Pamiętając o tym że wykładniki pozycji liczymy od zera mamy:
2^0 + 2^2 + 2^6 = 1 + 4 + 64 = 69(D)
Konwersja BIN -> HEX
Zanim rozpoczniemy przeliczanie należy wiedzieć, że system heksadecymalny poza podstawami od 0 do 9 korzysta jeszcze z liter od A do F, które odpowiadają dalszej numeracji następującej po dziewiątce, czyli A=10, aż do F=15. Jak to się ma do systemu dwójkowego? Znając już jego zasady wiemy, że:
0000(B)=0(H)
...
1001(B)=9(H)
1010(B)=A(H)
...
1111(B)=F(H)
Zamienimy teraz naszą liczbę 69 na jej postać szesnastkową. Wykorzystamy zapis dwójkowy który przed chwilą został stworzony, czyli 1000101. Jak dokonać przekształcenia? Rozdzielimy sobie naszą liczbę na kawałki o czterech pozycjach każdy, dzieląc oczywiście od prawej. Mamy więc:
100 | 0101 (jeżeli porcja od lewej ma mniej niż 4 pozycje, brakujące możemy zastąpić zerami)
Teraz każdą „porcję” zamieniamy na jej szesnastkowy odpowiednik. 100(B) to 4(H), a 0101(B) to 5(H). Nasza dziesiętna liczba 69 w systemie heksadecymalnym wynosi więc 45.
Konwersja BIN -> OCT
Zamieniając 69(D) na jej oktalną postać, najłatwiej skorzystać jest z jej dwójkowego odpowiednika. Wykonamy wtedy działanie podobne do zamiany BIN -> HEX. Co jest charakterystyczne dla tego systemu? System ten posługuje się 8 cyframi, czyli od 0 do 7. Jako że w systemie dwójkowym liczba 7(D) wynosi 111(B), liczbę 1000101 podzielimy w następujący sposób:
1 | 000 | 101
Odczytując kolejne cyfry znaną nam już metodą mamy:
1(B)=1(O)
000(B)=0(O)
101(B)=5(O)
Dziesiętna liczba 69 to w zapisie ósemkowym 105.
Wszystkie te mechanizmy działają również w drugą stroną według analogicznych zasad, zapewniam przy tym że te trzy algorytmy wystarczą do swobodnego przemieszczania się pomiędzy systemami. Myślę że chociaż po trochu rozjaśniłem trudy konwersji, pomijając liczby zmiennoprzecinkowe, których omówienie mogłoby zająć nam dużo więcej czasu (jeżeli pojawi się zapotrzebowanie to pomyślę o tym).
Pozdrawiam.
Konwersje systemów liczbowych
Rozpoczęty przez
#plus
, 01 11 2008 00:59
2 odpowiedzi w tym temacie
Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych