Moduł 2 Zastosowanie systemów liczbowych w informacji cyfrowej
Transkrypt
Moduł 2 Zastosowanie systemów liczbowych w informacji cyfrowej
Moduł 2 Zastosowanie systemów liczbowych w informacji cyfrowej 1. 2. 3. 4. 5. Pozycyjne systemy liczbowe Zasady zapisu liczb w pozycyjnych systemach liczbowych Podstawowe działania na liczbach binarnych Liczby binarne stało i zmiennoprzecinkowe Zastosowania praktyczne systemów liczbowych w systemach informatycznych Systemem liczbowym nazywamy sposób zapisywania liczb oraz zbiór reguł umożliwiających wykonywanie działań na tych liczbach. Dla każdego systemu liczbowego istnieje zbiór znaków, za pomocą których tworzy się liczby. Znaki te zwane cyframi można zestawiać ze sobą na różne sposoby otrzymując nieskończoną liczbę kombinacji. W informatyce powszechnie stosowane są systemy liczbowe które bazują na pozycyjny sposobie zapisu liczb. 1. Pozycyjne systemy liczbowe System pozycyjny to metoda zapisywania liczb w taki sposób, że w zależności od pozycji danej cyfry w ciągu, oznacza ona wielokrotność potęgi pewnej liczby uznawanej za podstawę danego systemu liczbowego. Liczby zapisujemy przy pomocy cyfr od strony lewej do prawej. W takim systemie zapisu, każda pozycja ma ściśle określoną i niezmienną wagę liczbową, która jest równa podstawie podniesionej do potęgi o wartości numeru pozycji. Wartość liczby w dziesiętnym systemie liczenia uzyskujemy po zsumowaniu poszczególnych iloczynów wag i cyfr pozycji. Jeżeli p oznacza podstawę systemu pozycyjnego to dowolną liczbę lp n-cyfrową można wówczas zapisać w następującej postaci: n 1 lp ai * pi i 0 an-1 an-2 … a2 a1 a0 = an-1 * pn-1 + an-2 * pn-2 +… + a2 * p2 + a1 * p1 + a0 * p0, gdzie: ai to cyfry należące do zbioru {0, 1, …, p–1}, pi - waga, i - numer pozycji cyfry w ciągu liczbowym, n - liczba cyfr w ciągu, * - iloczyn. Do podstawowych cech dowolnego systemu pozycyjnego o podstawie p zaliczamy: - system pozycyjny charakteryzuje liczba zwana podstawą systemu pozycyjnego, - do zapisu liczby służą cyfry, - cyfr jest zawsze tyle, ile wynosi podstawa systemu: 0, 1, 2, ..., (p-1), - cyfry ustawiamy na kolejnych pozycjach, - pozycje numerujemy od 0 poczynając od strony prawej zapisu, - każda pozycja posiada swoją wagę, - waga jest równa podstawie systemu podniesionej do potęgi o wartości numeru pozycji, - cyfry określają ile razy waga danej pozycji uczestniczy w wartości liczby, - wartość liczby obliczamy sumując iloczyny cyfr przez wagi ich pozycji. Do najbardziej popularnych i stosowanych w informatyce pozycyjnych systemów liczbowych zaliczamy: - system dziesiętny/decymalny, - system dwójkowy/binarny, - system szesnastkowy/heksadecymalny, - system ósemkowy/oktalny. Liczby w poszczególnych systemach zaznaczane są za pomocą indeksu dolnego w postaci liczby podstawy lub pierwszej litery nazwy angielskiej. 2. Zasady zapisu liczb w pozycyjnych systemach liczbowych 2.1 System dziesiętny/decymalny W życiu codziennym posługujemy się systemem dziesiętnym. Podstawą pozycji są kolejne wielokrotności liczby 10. Do zapisu liczb korzysta się z dziesięciu cyfr, którymi są 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 2 Zapis liczby 345 oznacza, że cyfra 5 znajduje się na pierwszej pozycji, 4 na drugiej, 3 na trzeciej. Pierwsza ma wagę potęgi zerowej postawy 100 czyli 1. Dlatego często nazywana jednostkami. Druga pozycja ma wagę 101czyli 10 (dziesiątki). Trzecia pozycja ma wagę 102czyli 100 (setki). Dlatego: 345 = 3*102+4*101+5*100=3*100 + 4*10 +5*1 = 300 +40 +5 2.2 System dwójkowy/binarny Cyfrowe urządzenia elektroniczne wykorzystują dwójkowy pozycyjny system liczbowy, gdzie podstawą jest liczba 2, a liczby zapisuje się za pomocą dwóch cyfr arabskich: 0 lub 1. Zapis liczby dwójkowej jest dłuższy niż dziesiętnej, jednak stosowanie tylko dwóch cyfr ułatwia budowanie układów półprzewodnikowych, gdzie w uproszczeniu 1 oznacza przepływ prądu a 0 brak przepływu. Przykładowy zapis liczby w systemie dwójkowym wygląda następująco: 1001(2). Zaczynając czytać od strony prawej taki zapis interpretujemy wagę każdej pozycji jako liczbę 2 podnoszoną do kolejnej potęgi. Rysunek 2.1 Waga pozycji w systemie dwójkowym. 1001(2) 1 0 0 1 23 22 21 20 Źródło własne Kluczowe dla umiejętności posługiwania się tym systemem jest zapamiętanie kolejnych potęg liczby 2. W tabeli 2.1 przedstawiono pomocne zestawienie wag systemu binarnego. Tabela 2.1 Wagi systemu dwójkowego 210 29 28 27 26 25 24 23 22 21 20 1024 512 256 128 64 32 16 8 4 2 1 Źródło własne Aby dokonać konwersji liczby dwójkowej na postać dziesiętną, należy każdą cyfrę mnożyć przez wagę otrzymaną z podstawy podniesionej do potęgi równej pozycji poczynając od prawej strony. Po przemnożeniu cyfr przez wagi należy je zsumować. Otrzymana liczba dziesiętna jest odpowiednikiem liczby binarnej. Na przykładzie poniżej liczba zapisana w systemie dwójkowym jako 1001(2) odpowiada 21(10)w systemie dziesiętnym. Przykład: 1001(2)= 1*20+0*21+0*22+1*23 = 1+8 =9(10) Aby dokonać zamiany liczby dziesiętnej na postać binarną, należy wykonać cykliczne dzielenie przez 2 z resztą w postaci liczby całkowitej 1 lub 0. Wynik z pierwszego dzielenia ponownie jest dzielony przez 2, i tak aż do uzyskania 0. Liczba binarna powstaje na bazie reszt zapisanych w odwrotnej kolejności. 3 Tabela 2.2 Przykład zamiany liczby dziesiętnej na postać binarną. Działanie Wynik Reszta 9:2 4 1 4:2 2 0 2:2 1 0 1:2 0 1 Źródło własne Łatwo możemy dopatrzeć się zależności, że jedna pozycja zapisu liczby binarnej przyjmująca zapis 1 lub 0 oznacza 1 bit informacji. 2.3 System szesnastkowy/heksadecymalny. Podstawę systemu heksadecymalnego stanowi 16 cyfr. Pierwsze 10 to arabskie cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, pozostałe 6 to pierwsze litery alfabetu łacińskiego: A, B, C, D, E, F oznaczające kolejno dziesiętne: 10, 11, 12, 13, 14, 15. Przykładem zapisu liczby w systemie szesnastkowym jest: F15(16). Chcąc dokonać konwersji liczby szesnastkowej na postać dziesiętną należy każdą cyfrę przemnożyć przez wagę otrzymaną z podstawy systemu podniesionej do potęgi równej pozycji zaczynając od prawej strony. Po przemnożeniu cyfr przez wagi wykonujemy sumowanie. Otrzymana liczba dziesiętna jest odpowiednikiem liczby szesnastkowej. Liczba zapisana w systemie szesnastkowym jako F15(16) odpowiada 1221(10)w systemie dziesiętnym. Przykład: F15(16) = 5*160+ 1*161+15*162 =5 + 16 + 3840 = 3861(10) Widać na tym przykładzie wyraźnie, że ręczna konwersja liczb z systemu szesnastkowego może być skomplikowana. Dlatego też w konwersjach długich liczb można używać aplikacji systemowej kalkulator w widoku profesjonalnym lub programisty (w zależności od wersji systemu Windows). 4 Rysunek 2.2 Kalkulator w widoku programisty dla Windows 7. Źródło własne Aby dokonać zamiany liczby dziesiętnej na postać szesnastkową, należy wykonać cykliczne dzielenie przez 16 z resztą w postaci liczby całkowitej od 0 do 15. Wynik uzyskany z pierwszego dzielenia ponownie jest dzielony przez 16, i tak aż do uzyskania 0. Liczba szesnastkowa powstaje na bazie reszt zapisanych w odwrotnej kolejności. Wartości powyżej 9 koduje się za pomocą odpowiednich cyfr-liter. Przykład takiego działania przedstawia tabela 2.3. Tabela2.3 Przykład zamiany liczby dziesiętnej na postać szesnastkową. Działanie Wynik Reszta 3861:16 241 5 241:16 15 1 15:16 0 15(F) Źródło własne Konwersję liczby binarnej na postać szesnastkową należy rozpocząć od pogrupowania ciągu po cztery cyfry. Pomocna będzie zawartość tabeli 2.4 Grupowanie rozpoczynamy od prawej strony, aż do uzyskania końca liczby. Jeżeli ostatnie cyfry w pogrupowanej liczbie mają mniej niż cztery znaki, należy uzupełnić puste pozycje zerami. Konwersja z liczby szesnastkowej na binarną jest jeszcze prostsza. Wystarczy na podstawie tabeli 2.4 cyfry z systemu szesnastkowego zamienić na czterocyfrowe ciągi binarne i połączyć je w jeden zapis. Wynik konwersji należy zapisywać od strony lewej a nie prawej. 5 Tabela 2.4 Porównanie zapisu cyfr systemów: szesnastkowego i binarnego. Cyfra szesnastkowa Cyfra dwójkowa Cyfra szesnastkowa Cyfra dwójkowa 0 0000 8 1000 1 0001 9 1001 2 0010 A 1010 3 0011 B 1011 4 0100 C 1100 5 0101 D 1101 6 0110 E 1110 7 0111 F 1111 Źródło własne Przykład konwersji liczby szesnastkowej na binarną: F15(16) =1111 0001 0101(2) Przykład konwersji liczby binarnej na szesnastkową: 1000111010100(2) = 0001 0001 1101 0100 =11D4(16) 2.4 System ósemkowy/oktalny. System ósemkowy jest pozycyjnym system liczbowym, w którym podstawę stanowi 8 a do zapisu używa się kolejnych cyfr arabskich: 0, 1, 2, 3, 4, 5, 6, 7. Przykładem zapisu liczb w systemie ósemkowym jest 107(8). Konwersję liczb ósemkowych na postać dziesiętną i odwrotnie wykonuje się analogicznie jak w przykładach poświęconych systemom binarnemu i szesnastkowemu. Konwersję zapisu ósemkowego na dwójkowy i odwrotnie wykonuje się analogicznie jak w przypadku systemu szesnastkowego, wykorzystując zapisy z tabeli 2.5. Tabela 2.5 Porównanie zapisu cyfr systemów: oktalnego i binarnego. Cyfra oktalna Cyfra binarna 0 000 1 001 2 010 3 011 4 100 5 101 6 110 7 111 Źródło własne Systemy pozycyjne nie są osiągnięciem naszych czasów. Na przykład, zanim system dziesiętny stał się systemem powszechnym, różne cywilizacje posługiwały się innymi systemami. Na przykład system dwójkowy spotykano u niektórych plemion Au6 stralii i Polinezji. Natomiast Majowie w I w. p.n.e. używali układu dwudziestkowego. Babilończycy posługiwali się pozycyjnym sześćdziesiętnym systemem liczbowym. Podzielili godzinę na 60 minut, a minutę na 60 sekund. Inne pozostałości niektórych systemów, stosowanych w różnych epokach spotykamy w podziale roku na 12 miesięcy lub posługiwaniu się jednostką miary – tuzin. 3. Podstawowe działania na liczbach binarnych. 3.1 Dodawanie liczb binarnych. Dodawanie liczb binarnych opiera się na tabliczce dodawania, w której reprezentowane są cztery sumy cząstkowe pokazane w tabeli 2.6. Tabela2.6 sumy cząstkowe liczb binarnych 0+0=0 0+1=1 1+0=1 1+1=0 i 1 do przeniesienia Źródło własne Zasady podstawowej arytmetyki określają wyniki sumowania w trzech pierwszych wierszach. W czwartym, wynikiem jest liczba 2, która w systemie binarnym zapisywana jest jako 10, w związku z tym 0 pozostaje w kolumnie, natomiast 1 przenoszona jest do następnej kolumny. Przykład: 1 0 0(2) + = 1 1 0 1(2) 0 0 1(2) 3.2 Odejmowanie liczb binarnych. Odejmowanie liczb binarnych opiera się na tabliczce odejmowania, w której reprezentowane są cztery różnice cząstkowe pokazane w tabeli 2.7. Tabela 2.7 Różnice cząstkowe liczb binarnych. 0–0=0 1–0=1 1–1=0 0–1=1 i 1 do pożyczenia z następnej kolumny Źródło własne Ostatnia różnica 0 – 1 daje jedynkę oraz wymusza pożyczkę z następnej kolumny. Przykład: 1 0 0 1(2) 7 - 1 0 1(2) = 1 0 0(2) 3.2 Mnożenie liczb binarnych. Mnożenie liczb binarnych opiera się na tabliczce mnożenia, w której reprezentowane są cztery iloczyny cząstkowe pokazane w tabeli 2.8. Tabela 2.8 Iloczyny cząstkowe liczb binarnych. 0*0=0 1*0=0 1 *1 = 1 0*1=0 Źródło własne Mnożną wymnaża się przez wszystkie kolejne cyfry mnożnika analogicznie do mnożenia sposobem pisemnym, a uzyskane wyniki wprowadza się, począwszy od aktualnie używanej cyfry mnożnika w wierszach. Powstałe wiersze sumujemy zgodnie z zasadami dodawania liczb binarnych. Przykład: × + 0 1 0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 0(2) 0(2) 0 1 0 0(2) 3.2 Zapis ujemnych liczb binarnych. Stosując system binarny w informatyce (w systemach komputerowych) nie mamy możliwości stosowania znaku (-), który pozwoliłby określić liczbę ujemną tak, jak to ma miejsce w przypadku systemu dziesiętnego. Mamy do dyspozycji tylko bity 0 i 1.Jedną z najpopularniejszych metod zapisu liczb ujemnych jest metoda uzupełnień do 2 (U2). Istotą tej metody jest to, ze znak jest oznaczany przez cyfrę binarną, stanowiącą integralną część liczby,, co pozwala na wykonywanie obliczeń arytmetycznych. Aby uzyskać zapis binarny dziesiętnej liczby ujemnej, na początku obliczamy jej postać binarną z wartości bezwzględnej. Powstałą liczbę binarną należy uzupełnić zerami do ilości cyfr będących krotnością dwójki. Następnie należy zamienić wszystkie cyfry w liczbie binarnej na przeciwne, czyli jedynki na zera i odwrotnie. A na koniec do powstałej liczby dodajemy binarną jedynkę, a wynik jest ujemną liczbą binarną. Przykład: 1. konwersja 5(10)=101(2) 2. uzupełnienie 0101(2) 3. zamiana 1010(2) 1 0 1 0(2) 8 4. dodanie je- + 0 0 0 1(2) = 1 0 1 1(U2) dynki: Sprawdzenie: 1*(-23)+0*22+1*21+1*20= -8+2+1=-8+3=-5 4. Liczby binarne stało i zmiennoprzecinkowe. Podobnie jak w systemie dziesiętnym liczby binarne również mogą być zapisane w postaci ułamkowej. Zapis binarnych liczb pozycyjnych z przecinkiem może przyjąć postać stało lub zmiennoprzecinkową. Liczby stałoprzecinkowe umożliwiają zapis liczb w postaci ułamkowej, gdzie pozycja przecinka ustalana jest arbitralnie w zależności od wymaganej dokładności. Binarną liczbę stałoprzecinkową można potraktować jako złożenie dwóch części, liczby całkowitej oraz ułamkowej rozdzielonych przecinkami: 1011, 11(2) Wartości wag części ułamkowej przyjmują postać ułamków, gdzie dokładność określona jest przez wagę ostatniej cyfry. W porównaniu do liczb stałoprzecinkowych, liczby zmiennoprzecinkowe umożliwiają obsługę większego zakresu liczb kosztem wolniejszego przetwarzania i mniejszej dokładności. Termin „zmiennoprzecinkowe” oznacza, że nie istnieje stała liczba cyfr przed i po przecinku. Liczba zmiennoprzecinkowa składa się z dwóch części: liczby stałoprzecinkowej — mantysy (m) oraz podstawy (b) podniesionej do potęgi, zwanej cechą lub wykładnikiem (e). Liczba zmiennoprzecinkowa = m * be 5. Zastosowania praktyczne systemów liczbowych w systemach informatycznych. Powszechnie dwójkowy system liczbowy używany jest w elektronice cyfrowej i informatyce, gdzie minimalizacja liczby stanów (do dwóch) pozwala na prostą implementację sprzętową odpowiadającą zazwyczaj stanom wyłączony i włączony. Najbardziej znanym obszarem zastosowań są funktory logiczne nazywane też bramkami logicznymi. Są to elementy konstrukcyjne układów cyfrowych składające się z odpowiednio połączonych rezystorów, tranzystorów, kondensatorów i diod półprzewodnikowych. Podstawowe bramki logiczne AND, OR i NOT odzwierciedlają funkcje logiczne opisane przez algebrę Boole’a. Współcześnie fizyczne funktory rzadko budowane są na bazie pojedynczych elementów półprzewodnikowych, najczęściej korzysta się z gotowych bramek zawartych w układach scalonych typu TTL (rysunek 2.4). Podstawowe bramki OR i AND (oraz pochodne) mają dwa wejścia i jedno wyjście, natomiast bramka NOT ma jedno wejście i jedno wyjście. Działanie funktorów prezentowane jest za pomocą tablic prawdy, w których opisuje się kolejne kombinacje stanów na wejściach oraz odpowiednie wartości na wyjściu. Piktogramy najpopularniejszych bramek oraz tablice prawdy prezentuje rysunek 2.3. Rysunek 23 Tablice prawdy i piktogramy bramek logicznych. 9 Źródło: http://www.if.p.lodz.pl Rysunek 2.4 Układ TTL 7432 wykorzystujący bramki logiczne Źródło: http://zto.ita.pwr.wroc.pl Innym przykładem praktycznego zastosowania systemu binarnego może być proces wyznaczania adresu sieci lub maski podsieci na podstawie adresu IP w notacji dwójkowej. Sam adres IPv4 (32 bity) zapisuje się w postaci binarnej lub decymalnej. Przykład: adres IPv4(2) – 11000000. 10101000. 00000001. 00000001 adres IPv4(10) – 192.168.1.1 10 Przykładem praktycznego zastosowania systemu szesnastkowego jest określanie adresu IPv6 lub adresacja kart sieciowych. Posiadają one 48-bitowy unikatowy adres sprzętowy (MAC) zapisany w postaci np. 00:50:56:C0:FF:08. Ponadto adres IPv6, którego zapis składa się z 128 bitów zapisywany jest jako ciąg podzielony na 8 16-bitowych bloków. Przedstawia się je jako 4-znakowe liczby szesnastkowe rozdzielone dwukropkami. Przykład: adres IPv6(16) - 21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A Szesnastkowy system liczbowy stosuje się również, w przypadku programowania niskopoziomowego i sterowania innymi elementami sprzętu komputerowego. Zastosowanie systemu ósemkowego można zobaczyć w uniksowym poleceniu chmod, służącym do zmiany uprawnień dostępu do plików i katalogów. 11