Skocz do zawartości


Zdjęcie

Konwersje systemów liczbowych


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 #plus

#plus

    Uzależniony od forum

  • 1 315 postów

Napisano 01 11 2008 - 00:59

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.

  • 0

#2 Chinka

Chinka

    Seal of Approval

  • 426 postów

Napisano 03 11 2008 - 00:15

Krótko, zwięźle, zrozumiale i nie zamula jak wielu gości od programowania... brawo Plus

  • 0

#3 IntelInside

IntelInside

    Stały użytkownik

  • 224 postów

Napisano 03 11 2008 - 17:03

Super. Naprawdę przydatna rzecz. Wreszcie będę wiedział jak to wytłumaczyć siostrze...

  • 0

Zobacz więcej tematów z tagiem: konwersja plików



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych