1 Henryk Pirek nauczyciel informatyki Gimnazjum nr 5 w Piotrkowie Tryb. Porównanie dziesiętnego i binarnego systemu liczenia - propozycja metodyczna dla nauczycieli matematyki i informatyki Wstęp Systemy (układy) liczbowe są to sposoby zapisywania i nazywania liczb. Rozróżniamy dwa systemy zapisu: - niepozycyjny ( addytywny), - pozycyjny. W addytywnych systemach liczbowych wartość przedstawionej liczby jest sumą wartości jej znaków cyfrowych. W tych systemach znaczenie cyfry jest niezależne od miejsca położenia w liczbie. Addytywny system zapisu liczb wykorzystywany jest między innymi przez system liczbowy: hieroglificzny, rzymski i alfabetyczny. W pozycyjnych systemach liczbowych liczbę przedstawiamy jako ciąg cyfr, a wartość cyfry zależy od miejsca, czyli pozycji jaką ta cyfra przyjmuje w zapisanej liczbie. Każda pozycja ma określoną i niezmienną wagę. Wartość liczby n – cyfrowej możemy obliczyć według wzoru: n −1 ∑c ⋅ p = c i =0 gdzie: i i n −1 ⋅ p n −1 + ... + c1 ⋅ c ∈ {0,1,2,..., p − 1}, a p i 1 p +c ⋅ p 0 0 , – jest podstawą systemu liczenia. 2 Zapis taki nazywamy wielomianowym zapisem liczby w pozycyjnym systemie liczbowym lub pozycyjnym systemem zapisu liczb, a kolejne potęgi podstawy systemu p nazywamy rzędami. W niniejszej pracy porównam dwa pozycyjne systemy liczbowe: dziesiętny i dwójkowy (binarny). System dziesiętny używany jest na co dzień, natomiast system dwójkowy jest powszechnie stosowany w komputerach dzięki następującym własnościom: 1)cyfry 0 i 1 łatwo jest realizować technicznie przez procesy fizyczne, w których wyróżnia się tylko dwa stany: jeden z nich reprezentuje 0, drugi 1; np. w komputerze element półprzewodnikowy może znajdować się w jednym z dwóch stanów – przewodzi prąd elektryczny (cyfra 1) lub nie przewodzi (cyfra 0). Trudne zaś technicznie jest zbudowanie układu elektronicznego realizującego dziesięć stanów stabilnych odpowiadających cyfrom 0, 1, ..., 9; 2)algorytmy działań w dwójkowym systemie liczbowym są prostsze niż w innych systemach liczbowych; 3)cyfry 0 i 1 mogą być interpretowane jako wartości logiczne zdań (dwuwartościowy rachunek zdań); 1 – zdanie prawdziwe, 0 – zdanie fałszywe. Związek dwójkowego systemu liczbowego z rachunkiem zdań ma duże znaczenie przy projektowaniu komputerów. Podczas współpracy z komputerem zachodzi konieczność przechodzenia od zapisu liczb w systemie dziesiątkowym do zapisu liczby w dwójkowym systemie liczbowym; po wykonaniu przez maszynę obliczeń, wyniki otrzymuje się z powrotem w systemie dziesiątkowym. Dla określenia jednostki w dwójkowym systemie liczbowym używa się często symbolu L; nie trzeba wtedy pisać, że podstawa systemu wynosi 2. Zastosowanie dwójkowego systemu liczbowego w maszynach cyfrowych zaproponował już matematyk niemiecki G. W. Leibniz. 3 I. Postać liczb w systemie dziesiętnym i dwójkowym System dziesiątkowy i dwójkowy to pozycyjne systemy liczenia. Dlatego liczby w tych systemach zapisujemy za pomocą wielomianu. Wartość liczby w systemie dziesiętnym możemy obliczyć według wzoru: n −1 ∑C i =0 i ⋅ 10 i = C n−1 ⋅ 10 n −1 + ... + C1 ⋅ 101 + C 0 ⋅ 10 0 gdzie p = 10 i Ci ∈ {0,1,2,...,9} np. (256)10 = 2 ⋅ 10 2 + 5 ⋅ 101 + 4 ⋅ 10 0 . Wartość liczby w systemie dwójkowym ( binarnym) obliczamy według wzoru: n −1 ∑C i =0 i ⋅ 2 i = C n −1 ⋅ 2 n −1 + ... + C1 ⋅ 21 + C 0 ⋅ 2 0 gdzie p = 2 i Ci ∈ {0,1} Cyfry dwójkowe nazywamy bitami ( binary digit), gdzie: C0 ⋅ 2 0 - nazywamy najmniej znaczącym bitem, czyli najmłodszym, C n −1 ⋅ 2 n −1 - nazywamy najbardziej znaczącym bitem, czyli najstarszym. Każdą liczbę dziesiętną możemy zapisać w systemie dwójkowym i na odwrót. 1. 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 (101101)2. 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). 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. 4 * Przykład: Mamy liczbę binarną (110011)2. - 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. - Na pozycji 4 stoi 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 (110011)2. 2. 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ą 51. 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 32. Wartość następnej pozycji to 64, a to jest już więcej niż 51. 32 to wartość pozycji 5 liczby binarnej i będzie to najwyższa pozycja w przekształcanej liczbie. Liczba ta będzie miała 6 cyfr (przypominam, że pozycje liczymy od 0). Jako pierwszą cyfrę zapisujemy 1, gdyż 32 mieści się w liczbie 51. Od 51 odejmujemy teraz wartość zapisanej już liczby, czyli 32. Otrzymaliśmy 51 – 32 = 19. Tę liczbę musimy zapisać w pozostałych 5 cyfrach liczby binarnej. Sprawdzamy, czy wartość kolejnej pozycji liczby binarnej mieści się w otrzymanej reszcie (19). Wartość pozycji 4 wynosi 16. Liczba ta jest mniejsza od 19, więc zapisujemy kolejną jedynkę. Mamy już 11. Od 19 odejmujemy 16 i otrzymujemy 3. Sprawdzamy kolejną pozycję liczby binarnej - pozycję 3. Jej wartość wynosi 8. Liczba ta nie mieści się w otrzymanej reszcie, więc piszemy 0 (mamy 110). Przechodzimy do 5 następnej pozycji - 2. Jej wartość to 4. Nie mieści się w 3. Piszemy 0 – otrzymujemy 1100, i sprawdzamy następną pozycję - 1. Jej wartość to 2. Mieści się w 3. Piszemy 1, a od 3 odejmujemy 2. Zostało tylko 1. Pozostała nam ostatnia pozycja 0, której wartość pozycyjna wynosi 1. Do naszej liczby binarnej dopisujemy więc 1 i mamy gotową liczbę (110011)2, która równa jest (51)10. Możemy to zapisać następująco: (51)10 = 1 ⋅ 2 5 + 1 ⋅ 2 4 + 0 ⋅ 2 3 + 0 ⋅ 2 2 + 1 ⋅ 21 + 1 ⋅ 2 0 = (110011)2 51 = 32 + 16 + 0 + 0 + 2 + 1 Liczbę zapisaną w systemie dziesiętnym możemy również zamienić na binarną dzieląc ją przez 2 i zapisując kolejno otrzymywane reszty (0 lub 1). Na przykład (51)10 = 51 : 2 = 25 reszty 1 25 : 2 = 12 reszty 1 12 : 2 = 6 reszty 0 6 : 2 = 3 reszty 0 3 : 2 = 1 reszty 1 1 : 2 = 0 reszty 1 Czytając od dołu otrzymujemy (110011)2. 3. Zamiana liczb całkowitych ujemnych na dwójkowe. W jaki sposób komputer widzi liczby ujemne ? Jeżeli mamy liczbę np.5 = (101)2, to liczbę ujemną otrzymamy po postawieniu kreski, czyli -5. Można równie dobrze zapisać -101. 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. 6 Postać liczby ujemnej zależy od tego, na jakich liczbach operuje procesor. Dla uproszczenia weźmiemy procesor 16-bitowy (teraz już prawie zabytek), 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: negujemy cyfry i dodajemy jeden. *Przykład: Zapisać liczbę (-7) w systemie binarnym za pomocą 8 bitów. (7)10 = (00000111)2 (negujemy) ( 11111000 )2 + ( 00000001 )2 ( 11111001 )2 = (-7)10 4. Zamiana ułamka zwykłego, w którym mianownik jest potęgą dwójki. Aby zapisać ułamek w systemie binarnym, korzystamy z ogólnego wzoru, gdzie podstawa wynosi 2, a wykładniki potęg są ujemne i wyznaczają wagi poszczególnych cyfr: k C1 ⋅ 2 −1 + C 2 ⋅ 2 − 2 + ... + C k ⋅ 2 − k = ∑ C i ⋅ 2 −i i=0 C i - na prawo od przecinka 7 * Przykłady: 1 = 1 ⋅ 2 −1 = (0,1)2 , 2 1 = 0 ⋅ 2 −1 + 1 ⋅ 2 − 2 = (0,01)2 , 4 3 1 1 = + = 1 ⋅ 2 −1 + 1 ⋅ 2 − 2 = (0,11)2 . 4 2 4 5. Zamiana ułamka dziesiętnego. Aby zapisać ułamek dziesiętny w postaci liczby binarnej mnożymy część ułamkową przez 2. Jeżeli iloczyn ma więcej cyfr niż część ułamkowa wpisujemy 1 po lewej stronie kreski. Liczbę binarną odczytujemy od góry. * Przykłady: - Zapisać w postaci binarnej ( 0,125)10. x2 0, 0 0 1 125 250 bo 125 x 2 = 500 500 bo 500 x 2 = 1000 0 ( 0,125)10 = ( 0,001)2 - Zapisać w postaci binarnej ( 0,4)10. okres x2 0, 0 1 1 0 0 1 1 4 8 6 2 4 8 6 2 bo bo bo bo bo bo bo 4x2=8 8 x 2 = 16 6 x 2 = 12 2x2=4 4x2=8 8 x 2 = 16 6 x 2 = 12 ( 0,4)10 = 0,0110011... = [0,(0110)]2 6. Przedstawianie ułamków zwykłych w systemie dziesiątkowym i binarnym. 8 Ułamki zwykłe w systemie dziesiętnym Ułamki zwykłe w systemie binarnym Przykłady: Przykłady: 3 1 -1 -2 = 0,75 = 7⋅10 + 5⋅10 = 7⋅ + 5⋅ 1 10 100 4 3 1 1 -1 -2 = 0,11 = 1⋅2 + 1⋅2 = 1⋅ + 1⋅ 2 4 4 0, 7 5 3, :4 0 30 28 =20 20 == 0, 1 1 3, :4 0 6 4 =4 4 == Mnożymy 3 (3-0=3) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 30 Mnożymy 2 (30-28=2) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 20 Mnożymy 3 (3-0=3) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 6 Mnożymy 2 (6-4=2) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 4 5 -1 -2 -3 = 0,625 = 6⋅10 + 2⋅10 + 5⋅10 8 5 1 1 -1 -2 -3 = 0,101 = 1⋅2 + 0⋅2 + 1⋅2 = 1⋅ + 0⋅ + 2 4 8 0, 6 2 5 5, :8 0 50 48 =20 16 =40 40 == +1⋅ 1 8 Mnożymy 5 (5-0=5) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 50 Mnożymy 2 (50-48=2) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 20 Mnożymy 4 (20-16=4) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 40 0, 1 0 1 5, :8 0 10 8 = 4 0 8 8 = Mnożymy 5 (5-0=5) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 10 Mnożymy 2 (10-8=2) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 4 Mnożymy 4 (4-0=4) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 8 2 = 0,666... = 0,(6) – ułamek okresowy 3 2 = 0,1010... = 0,(10) – ułamek okresowy 3 0, 6 6 6 .. 2, :3 0 20 18 =20 18 =20 18 = 2... 0, 1 0 1 0... 2, :3 0 4 3 2 0 4 3 2 0 4... Mnożymy 2 (2-0=2) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 20 Mnożymy 2 (20-18=2) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 20 Mnożymy 2 (20-18=2) przez 10 (bo system dziesiątkowy) i dlatego otrzymujemy 20 Mnożymy 2 (2-0=2) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 4 Mnożymy 1 (4-3=1) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 2 Mnożymy 2 (2-0=2) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 4 Mnożymy 1 (4-3=1) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 2 Mnożymy 2 (2-0=2) przez 2 (bo system dwójkowy) i dlatego otrzymujemy 4 9 Nie każdy ułamek zwykły skończony w systemie dziesiątkowym jest taki sam jak w systemie dwójkowym np.: 1 = (0,2)10 = [0,(0011)]2 5 Jak widać w systemie dziesiątkowym jest on skończony, natomiast w systemie dwójkowym jest okresowy o okresie (0011). 7. Zaokrąglanie liczb w systemie binarnym. Znak przybliżenia z liczbą pod spodem oznacza do którego miejsca po przecinku następuje przybliżenie. Dodajemy liczbę ograniczoną do tylu miejsc po przecinku, ile rozpatrujemy, do następnej cyfry: * Przykłady: 0,0001111010 ≈ 0,0 = 0 1 0,0001111010 ≈ 0,00 = 0 2 0,0001111010 ≈ 0,001 3 0,0001111010 ≈ 0,0010 4 0,0001111010 ≈ 0,00100 5 0,0001111010 ≈ 0,001000 6 II Działania w systemie dziesiętnym i dwójkowym Działania w systemie dwójkowym możemy wykonywać według ogólnie znanych zasad w systemie dziesiętnym. Należy jedynie pamiętać, że: 1 + 1 = 10 1 + 1 + 1 = 11 1 + 1 + 1 + 1 = 100 1 + 1 + 1 + 1 + 1 = 101 1 + 1 + 1 + 1 + 1 + 1 = 110 1 + 1 + 1 + 1 + 1 + 1 + 1 = 111 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 1000 0–0=0 1–0=1 1–1=0 10 – 1 = 1 10 Działania w systemie dziesiętnym Działania w systemie binarnym DODAWANIE + 1 1 1 6 5 4 1 1 1 1 1 1 0 1 0 0 + 1 1 0 1 1 0 1 7 0 1 0 1 0 1 0 1 0 ODEJMOWANIE - 1 4 9 1 0 5 - 0 1 10 0 10 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 0 0 1 = 4 4 0 1 1 0 0 MNOŻENIE x 4 3 1 1 4 3 + 4 3 4 7 3 1 0 1 0 1 1 x 1 0 1 1 1 1 1 1 1 0 0 0 0 + 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 1 11 DZIELENIE 1 1 1 0, 1 0 0 1 1 ... 1 4, 6 7 - 5 2 - 2 = - 3 : 5 = 14,6 3 0 3 0 3 0 = = 1 0 1 = 1 = 0 0 0 1 = - 1 1 0 0 1 1 = 0 0 1 : 1 0 1 0 1 1 0 0 1 = 1 1 0 - 1 0 1 = = 1 0 0 0 1 0 1 = =1 1 0 1 0 1 = = 1 0 ... 1001001 : 101 = 1110,100110... = 1110,(1001) Literatura: 1. Zinajda Krawcewicz, „Zadania dla uczniów klas V-VIII uzdolnionych matematycznie”, WSiP W-wa 1976 2. Stanisław Kowal, „Przez rozrywkę do wiedzy”, Wydawnictwo Naukowo Techniczne, W-wa 1985