16 kwietnia 2021

Wstęp do pozycyjnych systemów liczbowych

Podstawowe pojęcia

System pozycyjny, to sposób zapisu liczb opierający się na wybranej podstawie.

Podstawą może być dowolna wybrana liczba różna od 1 oraz 0. Jednak dla zachowania przejrzystości umownie korzysta się z liczb naturalnych.

Wartość cyfry w tym systemie określa jej pozycja. Każda następna liczba jest zwielokrotniona przez podstawę systemu.

liczby binarne

Metodą zapisywania liczb w pewnym porządku są systemy pozycyjne.

Przykład:

Wartość liczby dziesiętnej można zapisać w systemie pozycyjnym, lub w postaci sum iloczynów:

427  =  4∙102 + 2∙101 + 7∙100

Schemat wygląda tak samo dla liczb o innych systemach, na przykład liczby o podstawie 2:

1101  =  1∙23 + 1∙22 + 0∙21 + 1∙20

Oznaczając x0, x1, x2, …, xn za kolejne cyfry przyjętej liczby (gdzie x0 oznacza cyfrę o najmniejszej znaczności, natomiast xn cyfrę o największej) oraz „p” za podstawę (na przykład 10) można zapisać wzór ogólny do przekształcenia naszej liczby na iloczyn sum:

xn∙pn + x(n-1)∙p(n-1) + x(n-2)∙p(n-2) + … + x2∙p2 + x1∙p1 + x0∙p0

Na tym etapie można by słusznie zastanowić się – do czego może przydać się wyznaczanie iloczynu sum?

Systemy liczbowe - Przeliczanie

Dowolny system na system dziesiątkowy:

Iloczyn sum jest najprostszym sposobem, który można zapisać w programie, aby zamienić liczbę o dowolnym systemie na system dziesiątkowy. Za przykład niech posłuży prosty system binarny:

1011  =  1∙23 + 0∙22 + 1∙21 + 1∙20  =  1∙8 + 0∙4 + 1∙2 + 1∙1 = 8 + 2 + 1 = 11

System dziesiątkowy na dowolny system:

Konwersja liczby dziesiętnej na liczbę o dowolnej podstawie odbywa się poprzez wyznaczanie kolejnych reszt z dzielenia wybranej liczby w systemie dziesiętnym przez podstawę systemu do której konwertujemy naszą liczbę:

Przykład:

Za przykład niech posłuży konwersja liczby z systemu dziesiątkowego na system czwórkowy:

10 → 4

Dla liczby 31:

Konwersja „ręczna”:

systemy liczbowe

Przykład konwersji ręcznej.

Z powstałych reszt z dzielenia, budujemy naszą liczbę w systemie czwórkowym:

31(10) = 133(4)

Konwersja dostosowania do działania komputera:

dziesiętny na binarny

Przykład działania konwersji.

  1. Wykorzystanie reszt z dzielenia

Algorytm kończy działanie, gdy następna dzielna jest równa 0.

Wynik to reszty czytane od ostatniej, do pierwszej.

  1. Wykorzystanie dzielenia całkowitego

Przyjmijmy „dziel” za operator dzielenia całkowitego w programie.

kod u2

Zastosowanie dzielenia całkowitego w działaniu.

Algorytm kończy działanie, gdy następna dzielna jest równa 0.

Wynik to reszty czytane od ostatniej, do pierwszej.

Dowolny system na dowolny inny system:

Najprostszą metodą konwersji między systemami nie będącymi decymalnym, jest:

  1. Zamiana liczby na dziesiętną
  2. Konwersja liczby dziesiętnej na dowolny wybrany system

Zapis liczby ujemnej w systemie ZM

System zapisu ZM jest pewnym rozszerzeniem zwykłego zapisu naturalnego danej liczby na taki, zrozumiały dla komputera. Polega on na zarezerwowaniu bitu o największej znaczności, na bit znaku. Zapis wygląda następująco:

  • dla bitu znaku równego 1 – liczba jest ujemna
  • dla bitu znaku równego 0 – liczba jest dodatnia

Przykład:

1001(ZM) = -(0 ∙ 22 + 0 ∙ 21 + 1 ∙ 20) = -(0 + 0 + 1) = -1

0001(ZM) = 0 ∙ 22 + 0 ∙ 21 + 1 ∙ 20 = 0 + 0 + 1 = 1

Kody uzupełnień – U1, U2 oraz BIAS

Dotąd o zapisie liczb ujemnych powiedzieliśmy, że można go łatwo zapisać w systemie ZM. Jest to prosty w zrozumieniu system w którym ujemność oznaczana była przez zapis z bitem znaku.

Nie jest to jednak jedyny system zapisu, głównie z uwagi na problemy z operacjami arytmetycznymi lub brakiem możliwości zmiany zakresu kodowanych liczb na odpowiedniej ilości bitów.

System uzupełnień do 1 – U1

System uzupełnień U1 powstał z uwagi na problem przy wykonywaniu operacji arytmetycznych w komputerze ponieważ nie jest to zapis jednorodny.

Zapis liczby w systemie U1 polega na zarezerwowaniu bitu o największej znaczności na bit uzupełnienia. Polega to na tym, że najstarszy bit (w liczbie jest to bit zapisany skrajnie po lewej) przyjmuje wartość ujemną odpowiedniego bitu + 1.

Przykład:
1101(U1) = -1 ∙ 23 + 1 + 1 ∙ 22 + 0 ∙ 21 + 1 ∙ 20 = -7 + 4 + 1 = -2

Dzięki temu na 4 bitach jesteśmy w stanie zapisać liczby z zakresu [-7, 7]

System ten jednak nie jest doskonały – zauważ, że w U1 zachodzi pewna zależność:

1111(U1) = -1 ∙ 23 + 1 ∙ 22 + 1 ∙ 21 + 1 ∙ 20 = -7 + 4 + 2 + 1 = 0

0000(U1) = -0 ∙ 23 + 0 ∙ 22 + 0 ∙ 21 + 0 ∙ 20 = 0 + 0 + 0 + 0 = 0

Niepotrzebnie więc przeznaczamy dwa zapisy na liczby o wartości 0.

Wynika to ze sposobu obliczania wartości U1.

Aby temu zapobiec, powstał system uzupełnień do 2.

System uzupełnień do 2 – U2

System U2 jest podobnym systemem do U1, jednak okazuje się, że drobna modyfikacja pozwala znacznie uprościć jego działanie.

Zapis liczby w systemie U2 polega na zarezerwowaniu bitu o największej znaczności, na bit uzupełnień. Przyjmuje on ujemną wartość odpowiedniego bitu.

Przykład:

1101(U2) = -1 ∙ 23 + 1 ∙ 22 + 0 ∙ 21 + 1 ∙ 20 = -8 + 4 + 1 = -3

Dzięki temu na 4 bitach jesteśmy w stanie zapisać liczby z zakresu [-8, 7]

Kod w zapisie BIAS – liczba z nadmiarem

Jeżeli stały zakres wartości liczb na danej ilości bitów nam nie odpowiada, to możemy „sięgnąć” po zapis z nadmiarem.

Przy zapisie z nadmiarem, aby dostać dowolny zakres (nie większy od zapisu w systemie naturalnym) wystarczy ustalić odpowiedni nadmiar i tak dla przykładu dla konkretnych BIAS na 4 bitach możemy zapisać liczby:

  • [-7, 8] – BIAS =  7
  • [7, 22] – BIAS = -7
  • [1, 16] – BIAS = -1

Obliczenie wartości liczby z nadmiarem zachodzi w bardzo prosty sposób – wystarczy od wartości liczby odjąć nasz ustalony nadmiar.

Przykład:

1101(BIAS=7) = 1 ∙ 23 + 1 ∙ 22 + 0 ∙ 21 + 1 ∙ 20 – BIAS = 8 + 4 + 1 – 7 = 6

Najnowsze wpisy

Jak pomóc dziecku w nauce programowania? Poradnik dla rodziców

Przeczytaj >>

Dlaczego warto uczyć dzieci programowania? – jakie umiejętności rozwija programowanie?

Przeczytaj >>

Python a C++

Przeczytaj >>

Algorytm Euklidesa w języku Python

Przeczytaj >>

10 podstawowych funkcji Excela, które trzeba znać

Przeczytaj >>

JESTEŚ AMBITNY?

Dołącz do nas jeszcze dziś i rozwijaj się w swojej ulubionej dziedzinie we współpracy z nauczycielami, którzy są autorami artykułów na naszym blogu!
POZNAJ OFERTĘ KUSÓW
© Ambitni Szkoła Informatyki 011111100101(2) | jesteś niemal gotowy!
crossmenu