URZĄDZENIA TECHNIKI KOMPUTEROWEJ Systemy liczbowe. Człowiek posługuje się w życiu codziennym systemem dziesiętnym. Myśli w ten sposób, ponieważ jest tak uwarunkowany od urodzenia (np. posiada dziesięć palców u rąk). Maszyna też jest uwarunkowana „genetycznie” tzn. działa lub nie. Technika cyfrowa to dział technologii, umożliwiający przetwarzanie danych przez urządzenia wykonawcze. Kiedyś były to elementy mechaniczne, dziś elektroniczne, a konkretnie przyrządy półprzewodnikowe. Oznacza to, że maszyna (jako niezbyt inteligentna) powinna mieć możliwość rozróżnienia jak najprostszej postaci informacji. Najmniejszą liczbą kombinacji jest 2 i ten system (dwójkowy lub binarny) przyjął się jako "język" wewnętrzny maszyny. Sposób kodowania danych Bit, najmniejsza możliwa jednostka informacji. Może posiadać wartość 0 lub 1 (stąd system binarny używany w komputerze). Fizycznie wartość 0 oznacza brak sygnału (prąd nie płynie), zaś 1 oznacza sygnał. Osiem bitów składa się na jeden bajt. Na n bitach można zapisać 2 do potęgi n różnych wartości. Podobnie jak dla bajtów, przedrostek kilo- (kilobit) oznacza 1024 bity, megabit to 1024 kilobity, gigabit to 1024 megabity, zaś terabit oznacza 1024 gigabity. Bajt, jednostka informacji złożona z ośmiu (najczęściej) bitów. Bajt może być samodzielnie adresowanym elementem pamięci komputera (komórka). Rozmiar bajtu dobrano tak, aby wystarczył do zapamiętania każdego znaku, np. litery, cyfry lub znaku typograficznego (a, 1, @) popularnych kodów, np. kodu ASCII, dlatego bajt jest często utożsamiany ze znakiem. Binarny kod, sposób zapisu informacji za pomocą dwu symboli: 0 i 1, oparty na dwójkowym systemie liczbowym. Aby ograniczyć długość kodu binarnego wprowadzono sposób kodowania zapisu dwójkowego na ósemkowy lub szesnastkowy. Liczby w kodzie binarnym • System bitowy – dwójkowy Liczba zapisywana jest ciągiem liczb: 1 lub 0 1 0 1 0 = 1*23 +0*22 + 1*21 +0*20 = 10 • System ósemkowy Liczba zapisywana jest ciągiem liczb: od 0 do 7 i następnie zamieniana na układ dwójkowy który po zestawieniu jest przekształcany 3 6 011110 = 0*25+ 1*24+ 1*23 +1*22 + 1*21 +0*20 = 30 • System szesnastkowy Podobnie jak wyżej, liczba zapisywana jest ciągiem liczb: od 0 do 15 (0 do E) 1 E 00011110 = 0*27 + 0*26+ 0*25+ 1*24+ 1*23 +1*22 + 1*21 +0*20 = 30 Zapis pliku Plik jest to jednostka zapisu i przechowywania danych w komputerze. Plik jest ciągiem bitów danych, opatrzony nazwą i atrybutami. Dane są zapisane w postaci kodu binarnego, zależnie od zawartości pliku. Nazwa z reguły składa się z głównej części nazwy i tzw. rozszerzenia (oddzielonego kropką). System operacyjny składa się z pewnej liczby plików. Wszystkie składniki systemu a także rejestry i ustawienia przechowywane są w plikach na dysku pamięci masowej. Fragment pliku binarnego zapisanego w kodzie szesnastkowym Systemy liczbowe - binarny Ponieważ każda informacja, która ma być przetwarzana przez układy cyfrowe, musi być reprezentowana przez dwie wartości, zwane na przykład zerem i jedynką logiczną, naturalnym staje się zainteresowanie systemem liczbowym dwójkowym, opartym właśnie na takim zapisie liczb. Pozwoli nam to zapisywać i przetwarzać liczby za pomocą układów cyfrowych. Opisujemy tu konstrukcję systemu dwójkowego, czyli binarnego, oraz szesnastkowego, czyli heksadecymalnego. Do zapisu dowolnej liczby bez znaku system dziesiętny wykorzystuje dziesięć symboli graficznych, zwanymi cyframi: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Przy ich użyciu jesteśmy w stanie przedstawić dowolną liczbę. System dziesiętny, podobnie jak dwójkowy, jest systemem pozycyjnym. Liczbę 425D (D oznacza zapis liczby w systemie dziesiętnym) możemy przedstawić jako następującą sumę: 425D = 4 * 100 + 2 * 10 + 5 * 1 Systemy liczbowe - binarny Czyli: 4 2 5 = 4*102 + 2*101 + 5*100 2- Pozycja setek 1- Pozycja dziesiątek 0 - Pozycja jedynek Widzimy więc, że cyfra na danej pozycji mnożona jest przez odpowiednią potęgę liczby 10, przy czym wykładnik tej potęgi zależy od położenia (pozycji) danej cyfry w liczbie. Uwaga! Pozycje cyfr w liczbie numerujemy od 0 (najmłodsza cyfra) Systemy liczbowe - binarny Poszczególne mnożniki, zwane inaczej wagami, w systemie dziesiętnym noszą nazwę odpowiednio: jedynek (100 = 1), dziesiątek (101 = 10), setek (102 = 100) i tak dalej. Poszczególne wagi w systemie dziesiętnym są potęgami liczby 10, dlatego jest ona zwana podstawą tego systemu (p = 10). Systemy liczbowe - binarny W systemie dziesiętnym dysponujemy dziesięcioma cyframi do zapisania dowolnej Iiczby bez znaku, w systemie dwójkowym musimy do tego celu używać jedynie dwóch cyfr: 0 i 1. Jak już wspomniano, obydwa systemy są pozycyjne, co oznacza, że cyfrę na danej pozycji mnoży się przez określoną wagę. Dla systemu dwójkowego podstawą jest liczba 2 (p = 2) i wagami są odpowiednie potęgi tej liczby. Kolejne pozycje liczby zwane są więc pozycjami jedynek, dwójek, czwórek, ósemek i tak dalej. Zapis w systemie dwójkowym, zwanym inaczej systemem binarnym, liczby 10100B (litera B sygnalizuje liczbę w systemie dwójkowym) oznacza: 10100B = 1 * 24 + 0 * 23 + 1 * 22 + 0 * 21 + 0 * 20 = 1*16 + 0*8 + 1*4 + 0*2 + 0*1 = 16 + 4 = 20D Wzór ten, określający sposób zapisu liczby w systemie dwójkowym, pozwala jednocześnie na dokonanie konwersji (przeliczenia) liczby zapisanej w systemie dwójkowym na liczbę zapisaną w systemie dziesiętnym. Systemy liczbowe - binarny Jedną z metod konwersji liczby dziesiętnej na dwójkową pokażemy na przykładzie pomijając uzasadnienie jej poprawności. Metoda ta polega na wykonywaniu kolejnych dzieleń całkowitoliczbowych (wynik jest liczbą całkowitą) przez liczbę 2, z zapisem reszty. Rozpoczynamy od podzielenia liczby przeliczanej przez 2. Kolejne dzielenie wykonujemy na liczbie będącej ilorazem (wynikiem) poprzedniego dzielenia. Postępowanie kontynuujemy aż do momentu otrzymania jako wyniku 0. Reszty dzieleń ustawione w odpowiedniej kolejności dają poszukiwaną liczbę binarną. Przykład: Dokonać konwersji liczby 23D na liczbę binarną. Rozwiązanie: Systemy liczbowe - binarny Przykład: Dokonać konwersji liczby 23D na liczbę binarną. Rozwiązanie: 23 : 2 = 11 11 : 2 = 5 5:2=2 2:2=1 1:2=0 r=1 r=1 r=1 r=0 r=1 kierunek odczytu wyniku A zatem 23D = 10111B STOP - SPRAWDZENIE Systemy liczbowe - binarny Przykład: Dokonać konwersji liczby 23D na liczbę binarną. Rozwiązanie: 23D = 10111B 10111B = 1 * 24 + 0 * 23 + 1 * 22 + 1 * 21 + 0 * 20 = 1*16 + 0*8 + 1*4 + 1*2 + 1*1 = 16 + 4 + 2 + 1 = 23D Systemy liczbowe - heksadecymalny System heksadecymalny, czyli szesnastkowy, nie jest używany bezpośrednio przez układy cyfrowe, stanowi natomiast wygodny, zwarty sposób zapisu liczb binarnych. Stosowany jest często przez programistów czy też przy wyświetlaniu informacji cyfrowej na ekranie (na przykład w programach typu debuger). W systemie heksadecymalnym do zapisu dowolnej liczby dysponujemy szesnastoma cyframi. Ponieważ symboli graficznych oznaczających liczby arabskie jest dziesięć, brakuje symboli sześciu cyfr. Przyjęto więc, że będą oznaczane początkowymi literami alfabetu (dużymi lub małymi). Zatem A oznacza dziesiątkę, B jedenastkę, aż do cyfry F, która oznacza piętnastkę Pełny zestaw cyfr heksadecymalnych jest następujący: ai € {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} gdzie ai jest dowolną cyfrą heksadecymalną. Systemy liczbowe - heksadecymalny Jeżeli przedstawienie ciągu liczb w postaci: 0, 1, 2, 3, 4, 5, 6, 7 jest zrozumiałe dla wszystkich ludzi (no, może prawie wszystkich), to przedstawienie tego ciągu jako (spróbujmy w słupku): 000 001 010 011 100 101 110 111 jest zrozumiałe jedynie przez Matematyków, Informatyków, Elektroników, Automatyków i przedstawicieli zawodów pochodnych oraz, co było założeniem twórców komputerów, przez tę „głupią” maszynę. Powyższy ciąg liczb przedstawiony został w tzw. naturalnym kodzie dwójkowym. Systemy liczbowe - heksadecymalny Jeżeli, po pewnej wprawie, rozróżnienie liczb w zakresie binarnym 0000 – 1111 nie powinno stanowić problemu dla przeciętnego człowieka, to zapamiętanie i określenie wartości dziesiętnej liczby binarnej – na przykład: 11010010110000111011001000101101 może być zarówno oznaką geniuszu jak i podejrzeniem o oszustwo. Człowiek musi na każdym kroku ułatwiać sobie życie, więc stworzył nowy kod. Porównując reprezentacje liczb w kodach binarnym i dziesiętnym w zakresie 0 – 15 dostrzegamy potrzebę zastąpienia cyfr powyżej 9 jakimś jednym znakiem (10 – to już liczba). I tak powstał kod „jeden z szesnastu” czyli kod heksadecymalny. Przedstawia on liczby z zakresu 0 – 15 w postaci znaków 0 – 9 oraz liter A, B, C, D, E, F : Systemy liczbowe - heksadecymalny Jak łatwo sprawdzić, cyfr heksadecymalnych jest szesnaście. Liczba szesnaście jest też podstawą tego systemu. Przykład Znaleźć liczbę dziesiętną odpowiadającą liczbie heksadecymalnej 4c2H. Rozwiązanie Zgodnie z podanym wzorem oraz wcześniejszymi informacjami: 4c2H = 4*162 + C* 161 + 2*160 = = 4*256 + 12*16 + 2*1 = 450D Konwersji liczby dziesiętnej na heksadecymalną można dokonać metodą analogiczną do pokazanej dla systemu dwójkowego, wykonując kolejne dzielenia z resztą przez liczbę 16. Należy jednak pamiętać, że reszty z dzielenia zapisujemy w postaci cyfr heksadecymalnych, czyli np. resztę 14 zapisujemy jako E. Najistotniejszą cechą systemu heksadecymalnego jest łatwość przechodzenia od zapisu binarnego do heksadecymalnego i na odwrót, przez co zapis heksadecymalny staje się zwartym zapisem liczb binarnych. Systemy liczbowe - heksadecymalny Przykład Zapisać liczbę binarną 1001011010 w postaci liczby heksadecymalnej. Rozwiązanie Przy przejściu od liczby binarnej do heksadecymalnej wykorzystujemy fakt, że każdej cyfrze heksadecymalnej odpowiada określona kombinacja czterech cyfr binarnych i na odwrót. Cyfra hex Liczba binarna Cyfra hex Liczba binarna 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 Systemy liczbowe - heksadecymalny Cyfra hex Liczba binarna Cyfra hex Liczba binarna 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 Przeliczaną liczbę binarną dzielimy od końca (czyli od najmłodszej pozycji) na czwórki, a następnie każdą z nich zapisujemy w postaci jednej cyfry heksadecymalnej, zgodnie z tabelą. Jeżeli ostatni fragment liczby nie jest pełną czwórką, możemy ją dopełnić do czwórki zerami. Tak więc dla liczby binarnej 1001011010B 0010 0101 1010B = 25AH Systemy liczbowe - heksadecymalny Cyfra hex Liczba binarna Cyfra hex Liczba binarna 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 Podobnie możemy postąpić przy przeliczaniu w drugą stronę. Wówczas każdą cyfrę heksadecymalną zapisujemy w postaci czwórki cyfr binarnych. Ewentualne nieznaczące zera na początku liczby binarnej można w wyniku pominąć. Systemy liczbowe - heksadecymalny Cyfra hex Liczba binarna Cyfra hex Liczba binarna 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 Przykład: zapisać liczbę heksadecymalną 7cd5H w postaci liczby binarnej. 7cd5H = 0111 I 1100 I 1101 I 0101B = 111110011010101B Uwaga: porównać długości liczb heksadecymalnych i odpowiadających im liczb dwójkowych. Podstawowe operacje arytmetyczne dla liczb binarnych Dodawanie. Liczby dwójkowe dodajemy podobnie, jak dziesiętne. Gdy po dodaniu dwóch cyfr uzyskuje się wartość niemożliwą do zapisania pojedynczą cyfrą, zachodzi tzw. przeniesienie. Odejmujemy wtedy od wyniku podstawę systemu, a do następnej (starszej) pozycji dodajemy 1. W przypadku liczb dwójkowych przeniesienie wystąpi już wtedy, gdy wynik dodawania dwu cyfr jest większy od 1 Podstawowe operacje arytmetyczne dla liczb binarnych Podstawowe operacje arytmetyczne dla liczb binarnych Uwaga, pułapka: W pamięci komputera liczby binarne przechowywane są w postaci ustalonej ilości bitów (np. 8, 16, 32 bity). Jeśli wynik sumowania np. dwóch liczb 8 bitowych jest większy niż 8 bitów, to najstarszy bit (dziewiąty bit) zostanie utracony. Sytuacja taka nazywa się nadmiarem (ang. overflow) i występuje zawsze, gdy wynik operacji arytmetycznej jest większy niż górny zakres danego formatu liczb binarnych (np. dla 8 bitów wynik większy od 28 - 1, czyli większy od 255): 11111111(B) + 00000001(B) = 1|00000000(B) (255 + 1 = 0) Przy nadmiarze otrzymany wynik jest zawsze błędny, dlatego należy bardzo dokładnie analizować problem obliczeniowy i ustalić typy danych zgodnie z przewidywanym zakresem wartości otrzymywanych wyników. Podstawowe operacje arytmetyczne dla liczb binarnych Podstawowe operacje arytmetyczne dla liczb binarnych Przy odejmowaniu korzystamy z tabliczki odejmowania, która w systemie binarnym jest bardzo prosta: 0-0= 0-1= 1-0= 1-1= 0 1 i pożyczka do następnej pozycji 1 0 Podstawowe operacje arytmetyczne dla liczb binarnych Odejmując 0 - 1 otrzymujemy wynik 1 i pożyczkę (ang. borrow) do następnej pozycji. Pożyczka oznacza konieczność odjęcia 1 od wyniku odejmowania cyfr w następnej kolumnie. Identycznie postępujemy w systemie dziesiętnym, tyle że tam jest to o wiele bardziej skomplikowane. Na razie załóżmy, iż od liczb większych odejmujemy mniejsze (w przeciwnym razie musielibyśmy wprowadzić liczby ujemne, a nie chcemy tego robić w tym miejscu). Przykład: Wykonać odejmowanie w systemie binarnym 1101110(2) - 1111(2). Obie liczby umieszczamy jedna pod drugą tak, aby ich cyfry znalazły się w kolumnach o tych samych wagach: 1101110 1111 ------------------------ Podstawowe operacje arytmetyczne dla liczb binarnych Odejmowanie rozpoczynamy od cyfr ostatniej kolumny. Wyniki zapisujemy pod kreską. W tym przykładzie odjęcie ostatnich cyfr 0 - 1 daje wynik 1 oraz pożyczkę do następnej kolumny. Pożyczki zaznaczamy kolorem czerwonym. - 1 1 1 0 1 1 1 0 1 1 1 1 ----------------------------------------------------------------------------1 Odjęcie cyfr w drugiej od końca kolumnie daje wynik 1 - 1 = 0. Od tego wyniku musimy odjąć pożyczkę 0 - 1 = 1 i pożyczka do następnej kolumny. 1 - 1 0 1 1 1 1 1 1 1 1 0 1 ---------------------------------------------------------------------------------------1 1 Podstawowe operacje arytmetyczne dla liczb binarnych Według tych zasad kontynuujemy odejmowanie cyfr w pozostałych kolumnach. Pamiętaj o pożyczkach! Jeśli w krótszej liczbie zabraknie cyfr, to możemy kolumny wypełnić zerami: - 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 1 1 1 1 -------------------------------------------------------------------------1 0 1 1 1 1 1 1101110(2) - 1111(2) = 1011111(2) (110(10) - 15(10) = 95(10)). Podstawowe operacje arytmetyczne dla liczb binarnych Uwaga, pułapka: Przy odejmowaniu również może dochodzić do nieprawidłowych sytuacji. Jeśli od liczby mniejszej odejmiemy większą, to wynik będzie ujemny. Jednakże w naturalnym systemie binarnym nie można zapisywać liczb ujemnych. Zobaczmy zatem co się stanie, gdy od liczby 0 odejmiemy 1, a wynik ograniczymy do 8 bitów: 1 - 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -------------------------------------------------------------------------------------------------1 1 1 1 1 1 1 1 Otrzymujemy same jedynki, a pożyczka nigdy nie zanika. Sytuacja taka nazywa się niedomiarem (ang. underflow) i występuje zawsze, gdy wynik operacji arytmetycznej jest mniejszy od dolnego zakresu formatu liczb binarnych (dla naturalnego kodu dwójkowego wynik mniejszy od zera). Oczywiście otrzymany rezultat jest błędny: Podstawowe operacje arytmetyczne dla liczb binarnych Mnożenie dwójkowe Naukę mnożenia binarnego rozpoczynamy od tabliczki mnożenia. Bez paniki jest ona równie prosta jak podane powyżej tabliczki dodawania i odejmowania. 0×0= 0×1= 1×0= 1×1= 0 0 0 1 Tabliczka mnożenia binarnego (podobnie jak w systemie dziesiętnym) posłuży do tworzenia iloczynów częściowych cyfr mnożnej przez cyfry mnożnika. Iloczyny te następnie dodajemy wg opisanych zasad i otrzymujemy wynik mnożenia. Podstawowe operacje arytmetyczne dla liczb binarnych Przykład: Pomnożyć binarnie liczbę 1101(2) przez 1011(2). Obie liczby umieszczamy jedna pod drugą tak, aby ich cyfry znalazły się w kolumnach o tych samych wagach: × 1101 1011 ----------- Podstawowe operacje arytmetyczne dla liczb binarnych Każdą cyfrę mnożnej mnożymy przez poszczególne cyfry mnożnika zapisując wyniki mnożeń w odpowiednich kolumnach - tak samo postępujemy w systemie dziesiętnym, a tutaj jest nawet prościej, gdyż wynik mnożenia cyfry przez cyfrę jest zawsze jednocyfrowy: × 1 1 0 1 1 0 1 1 ---------------------------------------------------------------------------1 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1 Zwróć uwagę, iż wynikiem mnożenia mnożnej przez cyfrę mnożnika jest powtórzenie mnożnej z przesunięciem o pozycję cyfry (cyfra mnożnika 1) lub same zera (cyfra mnożnika 0). Spostrzeżenie to bardzo ułatwia konstrukcję układów mnożących. Podstawowe operacje arytmetyczne dla liczb binarnych Puste kolumny uzupełniamy zerami i dodajemy do siebie wszystkie cyfry w kolumnach. Uważaj na przeniesienia. 1 1 0 1 × 1 0 1 1 ----------------------------------------0 0 0 1 1 0 1 0 0 1 1 0 1 0 + 1 1 0 1 0 0 0 ---------------------------------------------------------------------------------------1 0 0 0 1 1 1 1 Sprawdź, czy otrzymany wynik jest poprawny. Podstawowe operacje arytmetyczne dla liczb binarnych Dzielenie dwójkowe Dzielenie binarne jest najbardziej skomplikowaną operacją arytmetyczną z dotychczas opisywanych. Wymyślono wiele algorytmów efektywnego dzielenia, ale dla potrzeb tego opracowania wystarczy znany wam algorytm szkolny, który polega na cyklicznym odejmowaniu odpowiednio przesuniętego dzielnika od dzielnej. W systemie dwójkowym jest to szczególnie proste, ponieważ dzielnika nie musimy mnożyć. Podstawowe operacje arytmetyczne dla liczb binarnych Przykład: Podzielimy liczbę 1101(2) przez 10(2) (13(10) : 2(10)). Przesuwamy w lewo dzielnik, aż zrówna się jego najstarszy, niezerowy bit z najstarszym, niezerowym bitem dzielnej. Nad dzielną rysujemy kreseczkę: -----------1101 - dzielna 10 - przesunięty dzielnik Podstawowe operacje arytmetyczne dla liczb binarnych Dzielnik przesuwamy o jeden bit w prawo i próbujemy tego samego z otrzymaną różnicą. Jeśli odejmowanie jest możliwe, to nad kreską w następnej kolumnie dopisujemy 1, odejmujemy dzielnik od różnicy, przesuwamy go o 1 bit w prawo i kontynuujemy. Jeśli odejmowanie nie jest możliwe, to dopisujemy nad kreską 0, przesuwamy dzielnik o 1 bit w prawo i kontynuujemy. - - - 1 1 0 ------------------------------------------------------------1 1 0 1 1 0 -------------------------------------------------------0 1 0 1 1 0 --------------------------------------------------------0 0 0 1 1 0 ----------------------------------------------------------0 0 0 1 - wynik dzielenia - dzielna - przesunięty dzielnik - dzielna po pierwszym odejmowaniu przesuniętego dzielnika - przesunięty dzielnik - dzielna po drugim odejmowaniu przesuniętego dzielnika - dzielnik na swoim miejscu, odejmowanie niemożliwe - reszta z dzielenia Operacje te wykonujemy dotąd, aż dzielnik osiągnie swoją pierwotną wartość. Pozostała dzielna jest resztą z dzielenia. Oczywiście w tym momencie możemy dalej kontynuować odejmowanie wg opisanych zasad otrzymując kolejne cyfry ułamkowe - identycznie postępujemy w systemie dziesiętnym. W naszym przykładzie otrzymaliśmy wynik dzielenia równy: 1101(2) : 10(2) = 110(2) i resztę 1(2) (6(10) i 1(10)) Jest to wynik poprawny, gdyż 2 mieści się w 13 sześć razy i pozostaje reszta 1. Podstawowe operacje arytmetyczne dla liczb binarnych Podstawowe operacje arytmetyczne dla liczb binarnych http://www.math.edu.pl/system-binarny#math