Podstawowe pojęcia w systemach liczbowych
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.

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?
Systemy liczbowe – Przeliczanie
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”:

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.

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:
- Zamiana liczby na dziesiętną
- 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ż 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 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.
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.
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] – jeżeli BIAS = 7
- [7, 22] – jeżeli BIAS = -7
- [1, 16] – jeżeli 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
Po więcej informacji, zapraszamy do skorzystania z naszego kursu informatyki.


