1. SYSTEMY LICZBOWE UŻYWANE W TECHNICE KOMPUTEROWEJ System liczenia - sposób tworzenia liczb ze znaków cyfrowych oraz zbiór reguł umożliwiających wykonywanie operacji arytmetycznych na liczbach. Do zapisu liczb używa się skończonego zbioru znaków, zwanych cyframi. Rozróżnić można systemy liczbowe pozycyjne i addytywne. do systemów pozycyjnych zalicza się m.in.: dziesiętny, dwójkowy, ósemkowy, szesnastkowy. do systemów addytywnych zalicza się m.in.: rzymski, alfabetyczny, hieroglificzny. Czym jest liczba? Jest to po pojęcie abstrakcyjne, najczęściej używane w matematyce. Pozycyjny system liczbowy - sposób zapisywania liczb za pomocą skończonego zbioru znaków (cyfry arabskie, litery alfabetu), w którym wartość liczbowa zależy od jej umiejscowienia (pozycji) względem sąsiednich znaków. W systemie pozycyjnym charakterystyczna jest liczba zwana podstawą systemu pozycyjnego, określająca liczbę używanych cyfr (znaków). Wzór ogólny Zakładamy, że: p - podstawa systemu pozycyjnego, c n - cyfra systemu pozycyjnego i n - pozycja cyfry Wtedy wartość reprezentowaną przez symbol liczby zapisujemy jako sumę iloczynów postaci: c n * p n +... + c 2 * p 2 + c 1 * p 1 + c 0 * p 0 Do najpopularniejszych systemów liczbowych należą: dziesiętny (decymalny), dwójkowy (binarny), ósemkowy (oktalny) i szesnastkowy (heksadecymalny). System dziesiętny (decymalny) -> DEC Jest to najczęściej używany system liczbowy przez ludzi. W systemie tym podstawę stanowi liczba 10, a do zapisu liczb używa się dziesięciu symboli cyfr arabskich {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Każdemu z tych symboli przyporządkowana jest pewna wartość. Z tych prostych symboli tworzymy elementy bardziej złożone ustawiając cyfry na tzw. pozycjach, szeregując je od prawej do lewej. Najbardziej skrajna, prawa pozycja to pozycja jedności, następna to pozycja dziesiątek, dalej są pozycje setek, tysięcy itd. Przykład: pozycja setek pozycja dziesiątek pozycja jedności 579 = 5 * 100 + 7 * 10 + 9 * 1 Liczbę dziesiętną możemy zapisać na trzy sposoby. Pierwszy, najczęściej stosowany w życiu codziennym to np. 149. Zapisy, które będzie stosować będą następujące: 149 D lub 149 (10). Mateusz Pańkowski 1
System dwójkowy (binarny) -> BIN System ten jest wykorzystywany przez cyfrowe urządzenia elektroniczne. Podstawą jest liczba 2, natomiast liczby zapisuje się za pomocą cyfr arabskich {0, 1}. Mimo, że zapis liczby dwójkowej jest dłuższy niż liczby dziesiętnej, to jednak dzięki niemu nastąpiła rewolucja świata techniki i powstała taka dziedzina jak informatyka. Stosowanie tylko dwóch cyfr znacznie ułatwiło budowanie układów cyfrowych, w których cyfry te symbolizują np. dwa stany: 1 - stan wysoki (np. przepływ prądu, włączony) 0 - stan niski (np. brak przypływu prądu, wyłączony) Liczby w systemie dwójkowym zapisujemy w postaci: 1011 (czyt. jeden zero jeden jeden, nie tysiąc jedenaście!!!) Jako, że system ten podobnie jak dziesiętny, jest systemem pozycyjnym, to bez problemu można dokonać konwersji liczb binarnych na dziesiętne i odwrotnie. Liczby dwójkowe zapisywać będziemy w postaci 10011 B lub 10011 (2). Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN): Dokonaj zamiany liczby dziesiętnej 74 (10) na binarną (DEC -> BIN). 74 (10) = X (2) 74 (10) = 74 : 2 = 37 r. = 0 = 1001010 (2) 37 : 2 = 18 r. = 1 18 : 2 = 9 r. = 0 9 : 2 = 4 r. = 1 4 : 2 = 2 r. = 0 2 : 2 = 1 r. = 0 1 : 2 = 0 r. = 1 74 (10) = 1001010 (2) O co tu chodzi? Aby dokonać zamiany liczby dziesiętnej na postać binarną, należy po prostu wykonać cykliczne dzielenie z resztą. Dzielną jest liczba dziesiętna, natomiast dzielnikiem jest podstawa systemu binarnego, czyli 2. Wynik z pierwszego dzielenia (74 : 2) ponownie dzielony jest przez 2, i tak aż do uzyskania 0. Liczba binarna powstaje poprzez zapisanie reszt z dzielenia zapisanych w odwrotnej kolejności (od dołu do góry). Skąd reszta? Jeśli dzielimy liczbę nieparzystą przez 2, to nie ma możliwości aby dwójka zmieściła się tam pełną ilość razy i zostanie nam reszta 1, np.: 7 : 2 - dwójka w siedmiu zmieści się 3 razy i wtedy zostanie nam 1. W jedynce dwójka się nie zmieści. W ten sposób ta jedynka staje się resztą z dzielenia. 6 : 2 - dwójka mieści się tu 3 razy i nic nam nie zostaje, czyli reszta to 0. W momencie gdy dochodzimy do sytuacji, gdy nasza dzielna będzie wynosić 1, to jeszcze nie kończymy i ją również dzielimy przez dwa. Ale w tym przypadku należy pamiętać, że wynik tego dzielenia to 0, a jako resztę przepisujemy 1. Mateusz Pańkowski 2
Przykład zamiany liczby binarnej na dziesiętną (BIN -> DEC): Dokonaj zamiany liczby binarnej 101011 (2) na dziesiętną (BIN -> DEC). 101011 (2) = X (10) 101011 (2) = 1*2 0 + 1*2 1 + 0*2 2 + 1*2 3 + 0*2 4 + 1*2 5 = = 1*1 + 1*2 + 0*4 + 1*8 + 0*16 + 1*32 = 1 + 2 + 8 + 32 = 43 (10) 101011 (2) = 43 (10) Zamiana jest bardzo prosta. Kolejne cyfry w liczbie binarnej należy ponumerować, zaczynając od pierwszej z prawej strony (otrzymuje ona numer pozycji 0, następna 1, kolejna 2 itd.). Numeracja pozycji dla powyższego przykładu będzie wyglądała następująco: pozycja: 5 4 3 2 1 0 liczba binarna: 1 0 1 0 1 1 (2) Następnie każdą z cyfr mnoży się przez wagę otrzymaną z podstawy podniesionej do potęgi równej pozycji. Po przemnożeniu cyfr przez wagi należy je zsumować. Otrzymana liczba powinna odpowiadać liczbie binarnej. Dla uproszczenia: liczba binarna 1 * 2 0 + 1 * 2 1 + waga, czyli podstawa podniesiona do potęgi potęga, czyli pozycja, na której znajduje się cyfra Aby szybko móc przekształcać liczby binarne na postać dziesiętną warto zapamiętać wartości poszczególnych wag systemu binarnego. Wygląda to następująco: 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1024 512 256 128 64 32 16 8 4 2 1 System szesnastkowy (heksadecymalny) -> HEX System ten wykorzystywany jest najczęściej do uproszczonego zapisu długich liczb binarnych. Podstawę systemu heksadecymalnego stanowi 16 cyfr. Pierwsze dziesięć cyfr to cyfry arabskie od 0 do 9, a pozostałe sześć, to litery alfabetu łacińskiego A do F (10-15). Liczba w systemie szesnastkowym zapisywana jest przy pomocy liczb ze zbioru {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} i wygląda następująco: 1A4B H lub 1A4B (16). Przy wykonywaniu konwersji liczb pomiędzy systemami DEC/BIN/HEX najłatwiej posłużyć się tabelką: dziesiętna binarna szesnastkowa dziesiętna binarna szesnastkowa 0 0000 0 8 1000 8 1 0001 1 9 1001 9 2 0010 2 10 1010 A 3 0011 3 11 1011 B 4 0100 4 12 1100 C 5 0101 5 13 1101 D 6 0110 6 14 1110 E 7 0111 7 15 1111 F TABELA KONWERSJI LICZB Mateusz Pańkowski 3
Przykład zamiany liczby dziesiętnej na szesnastkową (DEC -> HEX): Dokonaj zamiany liczby dziesiętnej 1221 (2) na szesnastkową (DEC -> HEX). 1221 (10) = X (16) 1221 (10) = 1221 : 16 = 76 r. = 5 = 4C5 (16) 76 : 16 = 4 r. = 12 (C) 4 : 16 = 0 r. = 4 1221 (10) = 4C5 (16) W tym przypadku zamiany, również dokonujemy dzielenia z resztą. Dzielną jest liczba dziesiętna, dzielnikiem - podstawa systemu szesnastkowego, czyli 16. Wynik pierwszego dzielenia ponownie dzielimy przez 16, aż do uzyskania 0. Nasza liczba szesnastkowa odpowiadająca dziesiętnej, powstaje poprzez zapisanie reszt w kolejności od dołu do góry. Jeśli wartość reszty jest większa od 9, to zapisujemy ją przy pomocy litery alfabetu (A, B, C, D, E i F). Aby szybko obliczyć resztę z dzielenia (np. 1221 : 16) wystarczy pomnożyć część całkowitą (76) wyniku (w 1221 mieście się 76,3125 szesnastek) przez 16. Następnie wynik mnożenia trzeba odjąć od dzielnej (1221 - (76*16)) i otrzymamy resztę 5. Przykład zamiany liczby szesnastkowej na dziesiętną (HEX -> DEC): Dokonaj zamiany liczby szesnastkowej 14AC (16) na dziesiętną. 14AC (16) = X (10) 14AC (16) = C*16 0 + A*16 1 + 4*16 2 + 1*16 3 = 12*1 + 10*16 + 4*256 + + 1*4096 = 12 + 160 + 1024 + 4096 = 5292 (10) 14AC (16) = 5292 (10) Zamiany liczby szesnastkowej na dziesiętną dokonujemy analogicznie jak zamianę liczby binarnej na dziesiętną, z tym że w tym przypadku mnożymy każdą cyfrę (również od prawej strony) przez podstawę (16) podniesioną do potęgi. Potęga jest równa pozycji, na której znajduje się dana liczba. W naszym przypadku pozycje są następujące: pozycja: 3 2 1 0 liczba szesnastkowa: 1 4 A C (16) Przykład zamiany liczby binarnej na szesnastkową (BIN -> HEX): Dokonaj zamiany liczby binarnej 1011110101110100000101 (2) na szesnastkową. 1011110101110100000101 (2) = X (16) Zamianę liczby binarnej na szesnastkową powinniśmy zacząć od pogrupowania jej na części po 4 cyfry. Grupowanie rozpoczynamy od strony prawej i kontynuujemy do końca liczby. Jeżeli w ostatniej części jest mniej niż 4 cyfry, to należy uzupełnić ją o zera na pustych pozycjach: 1011110101110100000101 = 10 1111 0101 1101 0000 0101 (2) = Mateusz Pańkowski 4
= 0010 1111 0101 1101 0000 0101 (2) Teraz wykorzystamy tabelkę konwersji liczb i wszystkie, czterocyfrowe, pogrupowane znaki zamieniamy na odpowiadające im cyfry szesnastkowe: 0010 1111 0101 1101 0000 0101 2 F 5 D 0 5 001011110101110100000101 (2) = 2F5D05 (16) Tak więc, w bardzo prosty sposób otrzymaliśmy liczbę szesnastkową. Przykład zamiany liczby szesnastkowej na binarną (HEX -> BIN): Dokonaj zamiany liczby szesnastkowej A4B9F0 (16) na binarną. A4B9F0 (16) = X (2) Konwersja w tą stronę jest jeszcze prostsza. Również i tu wykorzystamy tabelę konwersji liczb. Aby dokonać zamiany, wystarczy zamiast cyfr heksadecymalnych podstawić odpowiadające im ciągi binarne (po cztery cyfry) i połączyć później w jedną liczbę. Mamy liczbę A4B9F0 (16) : A 4 B 9 F 0 1010 0100 1011 1001 1111 0000 Łączymy czterocyfrowe ciągi binarne w całość i zapisujemy liczbę binarną. Wynik jest następujący: A4B9F0 (16) = 101001001011100111110000 (2) Konwertowanie BIN -> HEX / HEX -> BIN w przedstawiony sposób jest o wiele łatwiejsze, niż mielibyśmy zamieniać BIN -> DEC -> HEX / HEX -> DEC -> BIN. Nie dość, że obliczenia wykonujemy znacznie szybciej, to przy okazji zmniejsza się prawdopodobieństwo popełnienia gdzieś błędu w obliczeniach. System ósemkowy (oktalny) -> OCT Pozycyjny system liczbowy w którym podstawą jest liczba 8. Liczby zapisuje się przy pomocy kolejnych cyfr arabskich {0, 1, 2, 3, 4, 5, 6, 7}. Mimo, że system ten jest dużo rzadziej stosowany niż poprzednie systemy liczbowe, to jednak warto znać. Typowym zastosowaniem systemu ósemkowego w informatyce jest nadawanie uprawnień dostępu do plików w systemie Linux przy pomocy polecenia chmod. Konwersja liczb ósemkowych na postać dziesiętną i odwrotnie, jest wykonywana analogicznie jak konwersja w systemach binarnych i heksadecymalnych. Mateusz Pańkowski 5
ĆWICZENIA 1) Dokonaj konwersji liczb dziesiętnych na binarne. a) 389 (10) b) 693 (10) c) 1732 (10) d) 2214 (10) 2) Dokonaj konwersji liczb binarnych na dziesiętne. a) 110101 (2) b) 1110111100 (2) c) 11010010011001 (2) d) 11111111000011111 (2) 3) Dokonaj konwersji liczb binarnych na szesnastkowe a) 10111010111011111 (2) b) 10001110101000011111 (2) c) 1110000011101001111101010111 (2) d) 111100001111000101010100110011111010100011111010101010100000 (2) 4) Dokonaj konwersji liczb szesnastkowych na binarne a) C56E (16) b) ABCDE (16) c) 66BF13A (16) d) FF99CB61AA (16) Mateusz Pańkowski 6