MATEMATYKA 1 Wstęp do informatyki- wykład 1 Systemy liczbowe Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum C++11, Helion, 2017 B. Stroustrup, Język C++. Kompendium wiedzy. Wydanie IV, Helion, 2014 S. B. Lippman, J. Lajoie, Podstawy języka C++, WNT, Warszawa 2003.
Zapis informacji w komputerach 2 Dane przetwarzane przez komputery można zredukować do kombinacji zer i jedynek. Taki sposób zapisu informacji związany jest z tym, że komputer jako urządzenie cyfrowe rozpoznać może dwa stany napięciowe: 0 brak napięcia lub bardzo niskie 1 wysokie napięcie. Z tego względu obliczenia wykonywane przez procesor opierają się na binarnym (dwójkowym) systemie liczbowym. Najmniejszą jednostką informacji potrzebną do określenia, który z dwóch równie prawdopodobnych stanów przyjął układ jest bit (ang. binary digit czyli cyfra dwójkowa). Skróconym symbolem bitu jest b. Bit przyjmuje jedną z dwóch wartości, które zwykle określa się jako 0 (zero) i 1 (jeden)- zatem bit jest tożsamy z cyfrą w systemie dwójkowym. bajt (ang. byte, symbol: B) 8 bitów
Systemy liczbowe o podstawie p > 1 3 Dla każdej liczby naturalnej x Î N oraz liczby naturalnej p >= 2 istnieją jednoznacznie wyznaczone: liczba n Î N oraz ciąg cyfr c 0, c 1,..., c n-1 (gdzie ck Î {0, 1,..., p - 1}) taki, że x = c 0 + c 1 p + c 2 p 2 +... + c n-1 p n-1 Ciąg ( c n-1...c 0 ) p nazywamy reprezentacją liczby x w systemie o podstawie p. Cyfra o indeksie n 1 to cyfra najbardziej znacząca (ang. MSD most significant digit). W celu określenia maksymalnej wartości liczby całkowitej, jaką można zapisać w przedstawionej postaci należy w miejsce cyfr c i podstawić wartość maksymalną, równą p 1: x = (p-1) + (p-1) p + (p-1) p 2 +... + (p-1) p n-1 =(p-1)(1+p+p 2 +...+p n-1 ) //suma ciągu geometrycznego =(p-1)(1-p n )/(1-p)=p n -1
Systemy liczbowe o podstawie p > 1 4 Najbardziej powszechne systemy: dwójkowy (binarny), p = 2,ck Î {0,1} ósemkowy (oktalny), p = 8, ck Î {0,1,2,3,4,5,6,7} dziesiętny (dziesiątkowy, decymalny), p = 10, ck Î {0,1,2,3,4,5,6,7,8,9} szesnastkowy (heksadecymalny) p = 16, ck Î{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} Ćwiczenie Zapisać liczby z zakresu od 0 do 16 w systemie o postawie p, dla p=2, 8, 16. p = 10 p = 2 p = 8 p = 16 0 0 0 0 1 1 1 1 2 10 2 2 5 101 5 5 8 1000 10 8 10 1010 12 A 15 1111 17 F 16 10000 20 10
5 Zamiana liczby dziesiętnej na binarną algorytm Euklidesa Przy zamianie liczby będziemy korzystać z dzielenia całkowitego oznaczanego operatorem / i reszty z dzielenia całkowitego oznaczanego operatorem % (modulo) dla przykładu: 7 / 3 = 2, bo w 7 mieszczą się dwie trójki 7 % 3 = 1, bo reszta z dzielenia 7 przez 3 = 1; Algorytm Euklidesa: Dopóki liczba dziesiętna jest większa od 0: wyznaczamy resztę z dzielenia (modulo) przez 2 konwertowanej liczby i zapisujemy ją w prawej kolumnie konwertowaną liczbę dzielimy przez 2 (dzielenie całkowite) i otrzymany wynik zapisujemy pod liczbą w lewej kolumnie Następnie spisujemy reszty (od dołu do góry!)
6 Zamiana liczby dziesiętnej na binarną algorytm Euklidesa Przykład Zamień liczbę 41 na system dwójkowy korzystając z alg. Euklidesa: liczbę 41 dzielimy modulo 2 i wynik zapisujemy z prawej strony, następnie liczbę 41 dzielimy całkowicie przez 2 i wynik zapisujemy pod spodem aż do momentu otrzymania 0; /2 %2 41 1, bo 41 % 2 = 1 20 0, bo 20 % 2 = 0 10 0 5 1 2 0 1 1 0 Aby mieć prawidłową postać liczby 41 w systemie dwójkowym (binarnym) należy prawą kolumnę przepisać w kolejności od dołu do góry: 101001. Zatem 41=(101001) 2
7 Zamiana liczby dziesiętnej na binarną algorytm Euklidesa 41 1 20 0 10 0 5 1 2 0 1 1 0 41=(101001) 2 Sprawdzenie: 41=20*2 +1 =(10*2+0)*2 +1 =((5*2+0)*2+0)*2 +1=(((2*2+1)*2+0)*2+0)*2+1 =((((1*2+0)*2+1)*2+0)*2+0)*2 +1 =(((((0*2 +1)*2+0)*2+1)*2+0)*2+0)*2 +1 =1*2 5 +0*2 4 + 1*2 3 + +0*2 2 +0*2 1 +1
8 Zamiana liczby dziesiętnej na dowolny system. Analogicznie możemy dokonać zamiany z systemu dziesiętnego na system o dowolnej podstawie wykonując dzielenie nie przez 2 lecz przez liczbę p, która jest podstawą systemu. W zapisie liczb w systemach o podstawie >10 przyjmujemy następujące oznaczenia dla cyfr: 10 = A, 11 = B, 12 = C, itd. Przykład Przedstawmy liczbę 62 w systemie o podstawie 8: /8 %8 62 6, bo 62 % 8 = 7 (62 = 7*8 + 6) 7 7, bo 7 % 8 = 7 0 Zatem (62)10 = (76)8 Przykład 2 Przedstawmy liczbę 63 w systemie o podstawie 5: 63 3, bo 62 % 5 = 3 12 2, bo 12 % 5 = 2, (12 to wynik z dzielenia całkowitego 63 / 5) 2 2 0 Zatem 63 (10) = 223 (5)
9 Obliczanie wartości dziesiętnej liczb zapisanych w innych systemach Aby odczytać wartość dziesiętną liczby zapisanej w systemie o danej podstawie postępujemy w następujący sposób: 2 5 2 4 2 3 2 2 2 1 2 0 1 0 1 0 0 1 (2) zatem: 101001 (2) = 1*2 0 + 0*2 1 + 0*2 2 +1*2 3 + 0*2 4 + 1*2 5 = 1 + 1*8+ 1*32 = 41 Ćw 1. Wyznaczyć wartość dziesiętną liczb dwójkowych (11101011) 2, (101011) 2, (10000) 2. Ćw 2. Jaka jest największa liczba binarna zapisana na czterech bitach, ośmiu bitach, n bitach? Podać wzór ogólny.
Obliczanie wartości dziesiętnej liczb przy pomocy schematu Hornera Zauważmy, że obliczenie wartości dziesiętnej liczby zapisanej w systemie o podstawie p jest równoważne z obliczeniem wartości następującego wielomianu w punkcie p: c n-1 p n-1 + c n-2 p n-2 +... + c 2 p 2 + c 1 p + c 0 = (...((c n-1 p + c n-2 )p + c n-3 )... +c 1 )p +c 0 Zatem możemy skorzystać ze schematu Hornera: Schemat Hornera b n-1 = c n-1 b k = b k+1.p + c k, (k = n-2,...,0) Przykład x=(11001111) 2 c 7 c 6 c 5 c 4 c 3 c 2 c 1 c 0 c k 1 1 0 0 1 1 1 1 p=2 b k 1 3 6 12 25 51 103 207 Stąd (11001111) 2 =(207) 10 10