Kody danych i ich konwersje



Pobieranie 54.07 Kb.
Data08.05.2016
Rozmiar54.07 Kb.

Kody danych i ich konwersje


Przesyłanie jakiejkolwiek wiadomości na odległość wymaga użycia kodu tłumaczącego przesyłane sygnały na cyfry, litery lub słowa. Konwersja informacji na zrozumiałą postać wymaga zastosowania alfabetu, tablicy kodowej lub kodu tłumaczącego sygnały na postać cyfrową.

Zapis kodowy


Wielkości fizyczne podlegające procesowi transmisji mogą być prezentowane w postaci analogowej lub cyfrowej. Dla dyskretnej prezentacji informacji zapis kodowy jest zbiorem jednoznacznych reguł określających sposób prezentacji danych. W komunikacji danych kodem nazywany jest system reguł i konwencji, zgodnie z którymi sygnały reprezentujące dane są formatowane, transmitowane, odbierane i przetwarzane.

Wśród dyskretnych zapisów kodowych wyróżnia się: zapis dwójkowy (binarny), ósemkowy (oktalny), dziesiętny (operujący dziesięcioma symbolami), szesnastkowy (heksadecymalny) oraz dwójkowy z kodowaniem dziesiętnym BCD (Binary Coded Decimal).


System dziesiętny


Używając na co dzień liczb (np. 6, 437, 22, 5000) posługujemy się dziesiętnym systemem liczbowym. Nazywa się on dziesiętnym ponieważ jego podstawa wynosi 10. W systemie tym istnieje 10 cyfr: 0,1,2,3,4,5,6,7,8,9. Warto zauważyć, że jak w każdym systemie liczbowym, tak i tutaj najniższą cyfrą jest 0, a najwyższą - cyfra o jeden mniejsza od podstawy (tu 9).

System dziesiętny jest systemem pozycyjnym. Oznacza to, że znaczenie cyfr zależy od miejsca (pozycji), na którym się znajdują. Pozycje o najmniejszym znaczeniu (od jedynek, dziesiątek,...) znajdują się po prawej stronie zapisu liczby. Pozycja jedynek ma zawsze znaczenie jedności. Każda kolejna pozycja w lewo ma wartość pozycji poprzedniej pomnożonej przez podstawę systemu. Dla systemu dziesiętnego pozycja jedności ma wartość 1, dziesiątek 1 x 10 = 10, setek 10 x 10 = 100, tysięcy 100 x 10 = 1000, dziesiątek tysięcy 1000 x 10 = 10000 itd. Można to uogólnić w ten sposób, że jeżeli ponumerujemy kolejne pozycje od 0 (0 - pozycja jedynek, 1 - pozycja dziesiątek, 2 - pozycja setek, itd.) to wartość każdej z nich jest podstawą systemu liczbowego podniesioną do potęgi, której wykładnikiem jest właśnie numer pozycji, czyli dla pozycji jedynek wartość wynosi 100 = 1, dziesiątek 101 = 10, setek 102 = 100, tysięcy 103 = 1000, dziesiątek tysięcy 104 = 10000, itd.

Weźmy dla przykładu liczbę 342. Najwyższą, a tym samym mającą tutaj największe znaczenie, pozycją jest pozycja setek, na której znajduje się cyfra 3, na pozycji dziesiątek mamy 4, a jedności 2. Nasza liczba jest więc sumą trzech setek, czterech dziesiątek i dwóch jedynek, czyli 3x100 + 4x10 + 2x1 = 342. Jak więc widać każda cyfra, a raczej pozycja, na której się znajduje, ma inne znaczenie. Przykładem systemu liczbowego nie pozycyjnego mogą być liczby rzymskie. Na przykład w liczbach I (1) i III (3) każda "pałeczka" ma takie samo znaczenie niezależne od pozycji, na której się znajduje

System dwójkowy, czyli jak liczy komputer.


Serce komputera - procesor, układ scalony kalkulatora i każdy inny układ scalony rozumie tylko liczby. Nawet rozkazy przekazywane są procesorowi w postaci liczb. Układ scalony zbudowany jest z miniaturowych tranzystorów. Są one takimi małymi urządzeniami, których rola w uproszczeniu sprowadza się do przepuszczania bądź nie przepuszczania prądu. W pewnej grupie takich tranzystorów każdy może być ustawiony w jednej z dwóch pozycji: otwarty albo zamknięty, przepuszcza albo nie przepuszcza, jest prąd albo nie ma prądu. Każdy tranzystor może przechowywać jedną cyfrę liczby. Jednak w systemie dziesiętnym jest aż dziesięć cyfr, a do tego potrzebna jest jednostka mogąca być ustawiona w dziesięć różnych pozycji. Tranzystor może być ustawiony tylko w dwie pozycje. Dlatego procesor liczy w systemie dwójkowym, w którym są tylko dwie cyfry: 0 i 1, które odpowiadają pozycjom odpowiednio: nie ma prądu, jest prąd.

Podstawą dwójkowego (zwanego też binarnym) systemu liczbowego jest liczba 2. Tak jak system dziesiętny, a także szesnastkowy, który poznasz później, jest on systemem pozycyjnym. Inne niż w systemie dziesiętnym jest w dwójkowym znaczenie poszczególnych pozycji. Pierwsza pozycja jak w każdym systemie jest pozycją jedynek (20 = 1). Wartość kolejnej pozycji to pozycja poprzednia pomnożona przez podstawę (liczbę 2): 1 x 2 = 2 = 21 (pozycję tę będziemy nazywać pozycją dwójek). Następna pozycja: 2 x 2 = 4 = 22 (pozycja czwórek). Kolejna: 4 x 2 = 8 = 23 (pozycja ósemek). Następne pozycje na lewo to pozycje: szesnastek (24), trzydziestek dwójek (25), sześćdziesiątek czwórek (26), itd.

Jeżeli zapisujemy jakąś liczbę binarną np. 100110, to aby mieć pewność, że nie zostanie ona wzięta za liczbę dziesiętną, powinno się pisać za liczbą literę "b" (binarna), czyli 100110b. Liczbę tę należy nazywać jeden-zero-zero-jeden-jeden-zero.

Zamiana liczb dwójkowych na dziesiętne.


Wszelkie wartości i liczby wyobrażamy sobie zazwyczaj jako liczby dziesiętne. Dlatego, jeżeli zobaczymy liczbę np. 45, wiemy od razu ile to jest. Natomiast nie mówi nam nic 101101b. Jest to ta sama liczba, tylko inaczej zapisana. Trzeba ją więc "przeliczyć" na system dziesiętny. Wystarczy znać wartości pozycyjne każdego miejsca w liczbie binarnej, czyli po prostu kolejne potęgi podstawy (liczby 2). Pierwsze z nich to:

20 1

21 2

22 4

23 8

24 16

25 32

26 64

27 128

28 256

29 512

210 1'024

211 2'048

212 4'096

213 8'192

214 16'384

215 32'768

216 65'536

217 131'072

218 262'144

219 524'288

220 1'048'576

221 2'097'152

222 4'194'304

223 8'388'608

224 16'777'216

225 33'554'432

226 67'108'864

227 134'217'728

228 268'435'456

229 536'870'912

230 1'073'741'824

231 2'147'483'648

232 4'294'967'296



Rejestry współczesnych procesorów przechowują tak duże, a nawet większe wartości.
Jeżeli znamy już wartości pozycyjne w liczbach binarnych, przeliczenie takiej liczby na dziesiętne jest proste. Zaczynając od pozycji zerowej (pierwszej od prawej) i przesuwając się w lewo dodajemy do siebie wartości pozycyjne tych pozycji, na których stoi cyfra 1. Pozycje, na których jest 0, pomijamy. Np.: mamy liczbę binarną 110011b. Pozycja 0 (pierwsza z prawej) zawiera cyfrę 1. Wartość dla tej pozycji - pozycji 0 wynosi 20 = 1. Mamy więc na razie 1. Na pozycji 1 (druga od prawej) też jest jedynka, a wartość pozycyjna wynosi tu 2. Dodajemy 1 + 2 = 3. Pozycje 2 i 3 zawierają zera, więc je pomijamy. Za to na pozycji 4 stoi już cyfra 1. Wartość pozycji 4 wynosi 24 = 16. Dodajemy więc tę liczbę do uprzednio otrzymanego wyniku: 3 + 16 = 19. Kolejna pozycja (5) też zawiera jedynkę, a jej wartość pozycyjna wynosi 25 = 32. Dodajemy: 19 + 32 = 51. Uzyskaliśmy liczbę 51. Tyle właśnie równa jest liczba 110011b.

Zamiana liczb dziesiętnych na dwójkowe.


Przeliczanie liczb dziesiętnych na dwójkowe jest nieco trudniejsze niż w kierunku odwrotnym. Przedstawię to na przykładzie. Weźmy liczbę dziesiętną 105. Pierwszym krokiem w zamianie tej liczby na binarną jest znalezienie pozycji w zapisie liczby binarnej o wartości największej mieszczącej się poniżej wartości przekształcanej liczby. Tutaj wartością taką jest liczba 64. Wartość następnej pozycji to 128, a to jest już więcej niż 105. 64 to wartość pozycji 6 liczby binarnej i będzie to najwyższa pozycja w przekształcanej liczbie. Liczba ta będzie miała 7 cyfr (przypominam, że pozycje liczymy od 0). Jako pierwszą cyfrę zapisujemy 1, gdyż 64 mieści się w liczbie 105. Od 105 odejmujemy teraz wartość zapisanej już liczby, czyli 64 (1000000b). Otrzymaliśmy 105 - 64 = 41. Tę liczbę musimy zapisać w pozostałych 6 cyfrach liczby binarnej. Sprawdzamy, czy wartość kolejnej pozycji liczby binarnej mieści się w otrzymanej reszcie (41). Wartość pozycji 5 wynosi 32. Liczba ta jest mniejsza od 41, więc zapisujemy kolejną jedynkę. Mamy już 11. Od 41 odejmujemy 32 i otrzymujemy 9. Sprawdzamy kolejną pozycję liczby binarnej - pozycję 4. Jej wartość wynosi 16. Liczba ta nie mieści się w otrzymanej reszcie, więc piszemy 0 (mamy 110). Przechodzimy do następnej pozycji - 3. Jej wartość to 8. Mieści się w 9. Piszemy 1, a od 9 odejmujemy 8. Zostało tylko 1. Wartości kolejnych dwóch pozycji (2 i 1), odpowiednio 4 i 2, są większe od jednego, stąd piszemy dwa zera. Mamy już 110100. Pozostała nam ostatnia pozycja 0 , której wartość pozycyjna wynosi 1. Do naszej liczby binarnej dopisujemy więc 1 i mamy gotową liczbę 1101001b, która równa jest 105. Sprawdź to. W taki właśnie sposób można przekształcić każdą liczbę dziesiętną, zapisując ją w postaci binarnej.

Ujemne liczby dwójkowe.


Rozdział ten opisuje w jaki sposób komputer widzi liczby ujemne. Jeżeli mamy liczbę np.5 (101b), to liczbę ujemną otrzymamy po postawieniu kreski, czyli -5. Można równie dobrze zapisać -101b. Komputer niestety nie może tak po prostu zapisać minusa, gdyż zna tylko dwa znaki: 0 i 1. Dlatego komputery stosują zapis tzw. uzupełnienia do dwóch.

Postać liczby ujemnej zależy od tego, na jakich liczbach operuje procesor. Dla uproszczenia weźmiemy procesor 16-bitowy, który operuje na 16-bitowych (16-cyfrowych binarnych) liczbach całkowitych. Liczba 18 będzie w nim reprezentowana jako 0000000000010010 (szesnaście cyfr). Jeżeli chcemy uzyskać ujemną wartość tej liczby, zapisujemy najpierw jej tzw. uzupełnienie do jednego, zwane częściej negacją, uzyskiwane przez odwrócenie każdej cyfry (jedynki na zera, a zera na jedynki). Uzupełnieniem do jednego naszej przykładowej liczby jest więc 1111111111101101. Teraz, aby uzyskać uzupełnienie do dwóch tej liczby, które będzie już właściwą liczbą ujemną, należy dodać jeden do uzupełnienia do jednego. Otrzymaliśmy 1111111111101110. Podsumowując: odwracamy cyfry i dodajemy jeden.


System szesnastkowy, czyli jak ułatwić sobie sprawę.


Używanie liczb dwójkowych jest niewygodne ze względu na długość zapisu tych liczb. Dlatego częściej stosowanym zamiennikiem systemu binarnego jest szesnastkowy (heksadecymalny) system liczbowy. Jak sama nazwa wskazuje, podstawą tego systemu jest liczba 16. Jako że jest to system pozycyjny, to w zapisie liczby każda pozycja ma wartość szesnaście razy większą niż pozycja poprzednia (z prawej strony). Kolejne pozycje od 0 mają więc wartości: 1, 16, 256, 4096, 65536, 1048576, 16777216, itd. Pozostaje tylko sprawa cyfr. Musi ich być szesnaście. Pierwsze dziesięć to: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Potrzebne są jeszcze jednoznakowe oznaczenia dla następnych wartości tj.: 10, 11, 12, 13, 14, 15. Stosuje się tu litery alfabetu, odpowiednio: A, B, C, D, E, F. Przyjęło się także, że jeżeli na początku zapisu liczby znajduje się litera, to przed nią należy postawić zero, które nie oznacza tu żadnej wartości, a ma charakter czysto formalny. Należy pamiętać, aby po każdej liczbie szesnastkowej napisać oznaczenie systemu liczbowego, czyli "h". Tak więc kolejne liczby w systemie szesnastkowym to: 0h, 1h, 2h, 3h, 4h, 5h, 6h, 7h, 8h, 9h, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 1Ah, 1Bh, 1Ch, 1Dh, 1Eh, 1Fh, 20h, 21h, 22h, itd., czyli jest prawie tak jak w systemie dziesiętnym z tą różnicą, że jest sześć cyfr więcej. Ważny jest jeszcze sposób wymawiania liczb heksadecymalnych. Na przykład liczby 212h nie nazywamy "dwieście dwanaście", tylko "dwa-jeden-dwa", a jest ona równa 530.

Zamiana liczb dwójkowych na szesnastkowe.


Głównym zastosowaniem liczb szesnastkowych jest skrócenie zapisu liczb dwójkowych. Jak to zrobić? Jest to o tyle proste, że podstawą systemu szesnastkowego (liczba 16) jest potęga (czwarta) podstawy systemu dwójkowego (liczby 2), bo 24 = 16. Dlatego każdą cyfrę szesnastkową można zapisać za pomocą czterech cyfr dwójkowych:

0h = 0000b

1h = 0001b

2h = 0010b

3h = 0011b

4h = 0100b

5h = 0101b

6h = 0110b

7h = 0111b

8h = 1000b

9h = 1001b

0Ah = 1010b

0Bh = 1011b

0Ch = 1100b

0Dh = 1101b

0Eh = 1110b

0Fh = 1111b
Aby zamienić liczbę dwójkową na szesnastkową, wystarczy, zaczynając od prawej strony, podzielić ją na grupy po cztery cyfry i każdą z nich zapisać szesnastkowo. Na przykład, chcąc zamienić liczbę 10111010110b trzeba podzielić ją następująco:

101 1101 0110

Szesnastkowe odpowiedniki to:

5 D 6


Otrzymaliśmy więc 5D6h.

Zamiana liczb szesnastkowych na dwójkowe.


Jeżeli opanowałeś zamianę liczb dwójkowych na szesnastkowe, to czynność odwrotna nie powinna sprawić Ci problemów. Po prostu każdą cyfrę liczby szesnastkowej należy rozpisać na cztery cyfry dwójkowe - zawsze cztery, chyba że rozpisujesz skrajnie lewą cyfrę liczby szesnastkowej. To znaczy, że jeżeli cyfrę szesnastkową można zapisać mniejszą ilością cyfr (np. 3h = 11b), to dopisz zera tak, aby uzyskać cztery cyfry (0011b). Na przykład liczbę 0A59h rozpisujesz: 101001011001b.

Zamiana liczb szesnastkowych na dziesiętne.


Przekształcanie na liczby dziesiętne liczb zapisanych szesnastkowo jest podobne do obliczania wartości dziesiętnych liczb binarnych z tą różnicą, że trzeba nie tylko dodawać, ale i mnożyć. Należy bowiem pomnożyć dziesiętny odpowiednik każdej cyfry przez jej wartość pozycyjną i zsumować wszystkie te iloczyny. Pokażę to na przykładzie przeliczenia liczby 0B75Eh. Zaczynamy od najmniej znaczących cyfr, czyli od prawej strony. Na pozycji zerowej (o wartości równej 1 - jak w każdym systemie) stoi cyfra E, której dziesiętnym odpowiednikiem jest 14. Zapamiętaj tę liczbę. Na pozycji 1, której wartość wynosi 16, znajduje się cyfra 5. Mnożymy więc 16 x 5 i otrzymujemy 80. Dodajemy tę liczbę do uprzednio uzyskanej (14) 14 + 80 = 94. Następna pozycja to pozycja o wartości 162 = 256. Stoi tam 7. Mnożymy 7 x 256 = 1792 i dodajemy do poprzedniego wyniku: 94 + 1792 = 1886. Ostatnia, trzecia pozycja zawiera cyfrę B równą 11, a wartość pozycyjna tej pozycji wynosi 163 = 4096. Znowu mnożymy te liczby: 11 x 4096 = 45056 i dodajemy wynik do uprzednio uzyskanego, czyli 1886 + 45056 = 46942. Tyle właśnie wynosi 0B75Eh

Zamiana liczb dziesiętnych na szesnastkowe.


Także i tutaj występuje podobieństwo do przeliczania liczb na dwójkowe. Najlepiej wytłumaczę cały proces na przykładzie. Przekształcę liczbę dziesiętną 3674 na liczbę szesnastkową. Szukam najpierw najwyższej pozycji, której wartość mniejsza jest jeszcze od mojej liczby dziesiętnej. Kolejne wartości pozycyjne to: 1, 16, 256, 4096, stop. 4096 jest już większe od 3674, więc najwyższą pozycją będzie pozycja o wartości 256. Gotowa liczba szesnastkowa będzie zatem miała 3 cyfry.

Sprawdzam teraz, ile razy w 3674 mieści się 256. Okazuje się, że czternaście. W systemie szesnastkowym 14 to E, więc zapisuję E. Sprawdzam ile to jest 256 x 14. Jest to równe 3584. Odejmuję 3674 - 3584 = 90. Została więc jeszcze liczba 90 i dwie pozycje, na których mam tę liczbę zapisać. Kolejna pozycja ma wartość 16. 16 mieści się w 90 pięć razy. Do E dopisuję piątkę i mam już E5. Mnożę 5 x 16 = 80 i odejmuję od 90: 90 - 80 = 10. Pozostała do dyspozycji jedna pozycja, czyli jedna cyfra do zapisania liczby 10. Cyfrą tą jest oczywiście A. Dopisuję ją i otrzymuję E5Ah. Dla sprawdzenia przelicz sobie E5Ah na liczbę dziesiętną i zobacz, czy równa jest 3674.


O systemie ósemkowym.


Także system ósemkowy, zwany też oktalnym, używany był kiedyś do skrócenia zapisu liczb dwójkowych, chociaż teraz raczej się go nie używa. Podstawą tego systemu jest liczba 8 i posiada on osiem cyfr: 0, 1, 2, 3, 4, 5, 6, 7. Tak jak poznane dotąd systemy liczbowe, system oktalny używa zapisu pozycyjnego, a kolejne pozycje mają wartości: 1, 8, 64, 512, 4096, itd. Zasady zapisu, przeliczania i operacji na liczbach ósemkowych są takie same jak przy liczbach dwójkowych i szesnastkowych, tylko że operuje się na innym zestawie cyfr i z inną podstawą.

Zapis dwójkowy z kodowaniem BCD


Zapis dwójkowy z kodowaniem BCD dla każdej cyfry dziesiętnej wymaga stosowania grup 4-bitowych dla prezentacji ciągu bitów w strumieniu danych. Notacja BCD jest powszechnie używana do wprowadzania i wyprowadzania informacji numerycznych, a także podczas kodowania w sygnalizacji optycznej za pomocą wskaźników typu LCD (Liquid Crystal Display) i LED (Light Emitting Diode).

Przykłady podstawowych konwersji liczbowych


Liczby

dziesiętne

(podstawa 10)

Liczby

binarne

(podstawa 2)

Liczby

ósemkowe

(podstawa 8)

Liczby

szesnastkowe

(podstawa 16)

Liczby

dziesiętne

(kodowanie BDC)

00

0000

00

0

0000 0000

01

0001

01

1

0000 0001

02

0010

02

2

0000 0010

03

0011

03

3

0000 0011

04

0100

04

4

0000 0100

05

0101

05

5

0000 0101

06

0110

06

6

0000 0110

07

0111

07

7

0000 0111

08

1000

10

8

0000 1000

09

1001

11

9

0000 1001

10

1010

12

A

0001 0000

11

1011

13

B

0001 0001

12

1100

14

C

0001 0010

13

1101

15

D

0001 0011

14

1110

16

E

0001 0100

15

1111

17

F

0001 0101


©absta.pl 2016
wyślij wiadomość

    Strona główna