System pozycyjny to sposób zapisu liczb opierający się na wielokrotnościach kolejnych potęg wybranej podstawy.
Podstawą może być dowolna wybrana liczba różna od 1 oraz 0. Jednak dla zachowania przejrzystości umownie korzysta się z liczb naturalnych.
Ciekawostka: teoretycznie można oprzeć system na podstawie 1, jednak jest to problematyczne - wartość zero reprezentowana jest wtedy przez kompletny brak jakichkolwiek znaków.
Wartość cyfry w tym systemie określa jej pozycja. Każda następna liczba jest zwielokrotniona przez podstawę systemu.
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 sumę iloczynów:
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 sumy iloczynów?
Dowolny system na system dziesiątkowy:
Sumowanie iloczynów 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”:
Przykład konwersji ręcznej.
Z powstałych reszt z dzielenia, budujemy naszą liczbę w systemie czwórkowym, patrząc na reszty od dołu:
31(10) = 133(4)
Konwersja dostosowania do działania komputera:
Przyjmijmy „dziel” za operator dzielenia całkowitego w programie.
Zastosowanie dzielenia całkowitego w przykładowej konwersji z systemu dziesiętnego.
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:
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:
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
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ń U1 powstał z uwagi na problem przy wykonywaniu operacji arytmetycznych w komputerze, ponieważ system znak moduł powoduje pewne problemy w niektórych przypadkach.
Najbardziej znacząca cyfra w systemie U1ma wartość ujemną odpowiedniej potęgi + 1. Zapis liczby ujemnej w systemie U1 polega na zanegowaniu wszystkich bitów liczby dodatniej o takiej samej wartości bezwzględnej. Nazwa "uzupełnienia do jeden" bierze się stąd, że dodanie do siebie liczby oraz jej przeciwieństwa da nam liczbę zlożoną z samych jedynek.
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 U2 jest podobnym systemem do U1, jednak okazuje się, że drobna modyfikacja pozwala znacznie uprościć jego działanie.
Podobnie jak w systemie U1, zapis liczby w systemie U2 polega na zarezerwowaniu bitu o największej znaczności na bit uzupełnień. Jego wartość jest ujemna. Aby zanegować liczbę w systemie u2, należy zanegować jej bity a następnie dodać jeden.
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] (nie mamy podwójnego zera, stąd dodatkowa wartość).
System U2 jest najpowszechniej używanym systemem, ponieważ binarne implementacje operacji arytmetycznych na nim nie wymagają oddzielnych podzespołów do zajmowania się liczbami ujemnymi - wartości ujemne i dodatnie (z małymi wyjątkami) traktowane sa jednakowo.
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:
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
Po więcej informacji, zapraszamy do skorzystania z naszego kursu informatyki.