Systemy liczbowe: informatyka – przeliczanie, kalkulator i zadania

Znajomość systemów liczbowych jest istotna nie tylko przy programowaniu, ale też na maturze z informatyki. Część zadań w arkuszach maturalnych często związana jest z systemem binarnym. Warto więc poznać sposoby konwersji pomiędzy systemami liczbowymi, zarówno w ramach obliczeń „na kartce”, jak i przy gotowych funkcjach oferowanych przez poszczególne języki programowania.

Kalkulator systemów liczbowych – binarny, ósemkowy, heksadecymalny

Kalkulator Systemów Liczbowych




Przeliczy liczbę (maksymalnie 20 cyfr) automatycznie na systemy: dwójkowy, ósemkowy, dziesiętny i szesnastkowy.

Wynik konwersji.

Co to systemy liczbowe?

Systemy liczbowe to sposób reprezentowania liczb przy użyciu różnych zestawów symboli oraz ich kombinacji. W przypadku każdego systemu można znaleźć unikalny sposób reprezentacji liczb. W tym artykule omówione są systemy liczbowe pozycyjne, czyli takie, w których wartość danej liczby zależy od tego, na jakich pozycjach znajdują się konkretne cyfry (przykładowo: w systemie dziesiętnym inną wartość ma 12, a inną 21). Przeciwieństwem są systemy niepozycyjne (addytywne), gdzie wartość liczby zależy od sumy wartości symboli.

Teoretycznie istnieje nieskończona liczba pozycyjnych systemów liczbowych (wystarczy użyć innej wartości jako podstawy), ale najpopularniejsze okazują się dwójkowy (binarny), ósemkowy (oktalny), dziesiętny (decymalny) oraz szesnastkowy (heksadecymalny). Zapewne zastanawiasz się, do czego właściwie one służą. Tymczasem dla każdego z nich można znaleźć inne zastosowania:

  1. Dziesiętny (decymalny, DEC) – system liczbowy używany powszechnie na co dzień ze względu na intuicyjny sposób stosowania. Opiera się na podstawie 10, a więc używa dziesięciu cyfr – od 0 do 9. Każdą wartość można zapisać poprzez mnożenie cyfr przez kolejne potęgi podstawy (czyli liczby 10) i sumując je ze sobą, np.: 37 = 3 * 101+ 7 * 100 = 30 + 7 = 37.
  2. Dwójkowy (binarny, BIN) – system liczbowy używany w elektronice oraz w informatyce, gdzie jednostką informacji jest bit. Został wybrany do komputerów ze względu na dobre dopasowanie względem działania elektroniki, gdzie 1 to sygnał, a 0 to brak sygnału (elektrycznego).
  3. Ósemkowy (oktalny, OCT) – system liczbowy oparty na podstawie 8. Używa cyfr od 0 do 7. Stosowany jest do przypisywania uprawnień w systemach Linux, a także w językach programowania takich jak C, C++ czy Java.
  4. Szesnastkowy (heksadecymalny, HEX) – system liczbowy oparty na podstawie 16. Oprócz cyfr od 0 do 9 używa także liter od A do F (lub a do f) jako reprezentacji liczb większych niż 9. Jest szeroko stosowany w informatyce, ponieważ można go łatwo przekonwertować na system binarny, a także zapisać większe liczby w mniejszej liczbie znaków. Można go znaleźć np. w adresach MAC czy IPv6, wykorzystywany jest też do zapisu kolorów.

Oczywiście możliwe jest zastosowanie konwersji danych liczb pomiędzy różnymi systemami zapisywania liczb. W tym celu stosuje się dwie metody: tabeli oraz reszty z dzielenia, a także wbudowane narzędzia i funkcje.

Konwersja systemów liczbowych
Gotowa konwersja liczb pomiędzy czterema najpopularniejszymi systemami liczbowymi. Jasno widać różnice pomiędzy poszczególnymi wartościami w różnych systemach.

Liczby w konkretnym systemie liczbowym oznacza się poprzez ustawienie podstawy danego systemu jako indeksu dolnego wartości, przykładowo:

  • 3710 – dziesiętny,
  • 102 – dwójkowy
  • 78 – ósemkowy,
  • A16 – szesnastkowy.

Binarny, ósemkowy lub heksadecymalny na dziesiętny – Przeliczanie systemów liczbowych

Do przeliczania systemów liczbowych na dziesiętny tradycyjnie korzysta się z dwóch metod, których można śmiało użyć na kartce papieru.

1 metoda – wzór

Przeliczenie jakiegokolwiek systemu liczbowego na dziesiętny okazuje się niezwykle proste. Wystarczy zsumować ze sobą wyniki mnożenia cyfr przez podstawę systemu do potęgi (pozycja cyfry) dla każdej kolejnej cyfry. Poniżej znajdziesz przykład konwersji liczby binarnej 10011 na system dziesiętny.

Stosuje się ogólny wzór:

cyfra * podstawa systemupozycja cyfry + kolejna cyfra * podstawa systemupozycja cyfry + … + ostatnia cyfra * podstawa systemupozycja cyfry

Co w przypadku konwersji liczby 100112 prezentuje się następująco:

1 * 24 + 0 * 23 + 0 * 22 + 1 * 21 + 1 * 20

Jak widać, należy brać każdą z cyfr po kolei (od lewej) i mnożyć przez podstawę systemu liczenia do potęgi o wartości pozycji cyfry (gdzie numer 0 to cyfra znajdująca się najdalej po prawej). Skoro więc w liczbie binarnej 100112 pierwsza liczba od lewej to 1, mnoży się ją przez liczbę 2 (podstawa systemu) do potęgi 4 (pozycja cyfry licząc od prawej), a więc 1 * 24. Następnie dodaje się kolejne cyfry mnożone przez potęgę podstawy systemu.

1 * 24 + 0 * 23 + 0 * 22 + 1 * 21 + 1 * 20 = 16 + 0 + 0 + 2 + 1 = 19

Liczba binarna 100112 odpowiada więc liczbie 19 w systemie dziesiętnym.

Przykłady konwersji liczb na system dziesiętny (decymalny):

  • Liczba dwójkowa (binarna) – 10102: 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 = 8 + 0 + 2 + 0 = 10
  • Liczba ósemkowa (oktalna) – 648: 6 * 81 + 4 * 80 = 48 + 4 = 52
  • Liczba szesnastkowa (heksadecymalna) – AC16: A * 161 + C * 160 = 10 * 161 + 12 * 160 = 160 + 12 = 172
ads banner
2 metoda – tabela konwersji

Istnieje również zastosowanie powyższej metody w formie tabeli, co może okazać się bardziej intuicyjne dla użytkownika.

Poniższa tabela składa się z potęg podstawy systemu, ich wartości, a także samych zer w trzecim wierszu.

21029282726252423222120
10245122561286432168421
00000000000

W liczbie binarnej (lub innej) należy zapisać konkretne cyfry z liczby do powyższej tabeli, od prawej do lewej strony. Przykładowo cyfra 1 najbardziej na prawo z liczby 10110001 jest wstawiana do komórki najbardziej na prawo (20), co widać na poniższym przykładzie.

Przykład konwersji z systemu dwójkowego
21029282726252423222120
10245122561286432168421
00010110001

Liczba binarna – 101100012

Teraz wystarczy pomnożyć liczby z drugiego wiersza przez wartości z trzeciego wiersza i dodać je do siebie: 128 * 1 + 32 * 1 + 16 * 1 + 1 * 1 = 128 + 32 + 16 + 1 = 177

W ten sposób można łatwo obliczyć wartość liczby z systemu zero-jedynkowego.

Przykład konwersji z systemu ósemkowego
8483828180
40965126481
00000

Liczba ósemkowa – 2618

8483828180
40965126481
00261

64 * 2 + 8 * 6 + 1 * 1 = 128 + 48 + 1 = 177

Przykład konwersji z systemu szesnastkowego
163162161160
4096256161
0000

Liczba szesnastkowa – B116

163162161160
4096256161
00B (czyli 11)1

16 * 11 + 1 * 1 = 176 + 1 = 177

Dziesiętny na binarny, ósemkowy lub heksadecymalny- Przeliczanie systemów liczbowych

Poniżej zostaną przedstawione dwie metody służące do konwersji liczb z systemu dziesiętnego na inny dowolny system liczbowy.

1. metoda – tabela konwersji
21029282726252423222120
10245122561286432168421

W tym przypadku korzysta się z gotowej tabeli potęgowania, podobnej do tej przedstawionej wyżej, dzięki której naprawdę łatwo uda się zmienić liczbę decymalną na binarną. Liczba, którą zmieniamy, to 177.

W tabeli potęgowania należy znaleźć największą wartość, zawartą w liczbie 177, czyli w tym przypadku 128. Sprawdzamy, ile razy się tam znajduje (w tym przypadku jeden raz), co zapisujemy w kolejnej tabeli (wyniku).

10245122561286432168421
00010000000

Następnie odejmujemy 177 – 128 = 49.

Teraz robimy to samo co wcześniej, tyle że z liczbą 49. A więc największa liczba w tym przypadku to 32, która również pojawia się tylko raz.

10245122561286432168421
00010100000

49 – 32 = 17

Powtarzamy nasze czynności z liczbą 17.

10245122561286432168421
00010110000

17 – 16 = 1

Teraz to 1.

10245122561286432168421
00010110001

Z drugiego wiersza tabeli odczytujemy liczbę po konwersji. Zer z lewej strony nie trzeba zapisywać.

Liczba po konwersji wynosi zatem: 10110001.

17710 = 101100012

Przykład konwersji na liczbę ósemkową (oktalną)

Tutaj również zmieniamy 17710, jednak na system oktalny.

8483828180
40965126481

Szukana wielokrotność to 64, która w przeliczanej wartości znajduje się 2 razy.

40965126481
00200

177 – (64 * 2) = 177 – 128 = 49

Poszukiwana wartość to 8, która w liczbie 49 znajduje się 6 razy.

40965126481
00260

49 – (8 * 6) = 49 – 48 = 1

Z kolei teraz znajdujemy liczbę 1.

40965126481
00261

17710 = 2618

Liczba po konwersji na system ósemkowy to w takim razie 2618.

Przykład konwersji na liczbę szesnastkową (heksadecymalną)
163162161160
4096256161

Konwertowana liczba: 17710.

Największa liczba w 177 to 16, która znajduje się tam 11 razy. Należy jednak pamiętać, że liczby od 10 do 15 to litery od A do F (w systemie szesnastkowym). Dlatego 11 jest zapisywane jako B.

4096256161
00B0

177 – (16 * 11) = 177 – 176 = 1

Teraz to oczywiście liczba 1.

4096256161
00B1

17710 = B116

Liczba po konwersji na system szesnastkowy to w takim razie B116.

2. metoda – reszta z dzielenia

Kolejna metoda konwersji liczb z systemu decymalnego na inny (pozycyjny) jest równie prosta. Może okazać się nawet bardziej intuicyjna przy ręcznym rozpisywaniu na kartce. W tym przypadku chodzi o dzielenie danej liczby przez podstawę systemu docelowego, a liczbę po konwersji tworzymy poprzez łączenie ze sobą reszt z dzielenia.

Przykład konwersji na liczbę dwójkową (binarną)

Przeliczanie - system decymalny na binarny
Konwersja z systemu dziesiętnego na binarny. Ten sposób można łatwo rozpisać na kartce, a następnie odczytać (od dołu do góry).

Podobnie jak w poprzednich przykładach, zastosujemy tu konwersję liczby 177.

177 : 2 = 88 (reszta z dzielenia: 1)

88 : 2 = 44 (reszta z dzielenia: 0)

44 : 2 = 22 (reszta z dzielenia: 0)

22 : 2 = 11 (reszta z dzielenia: 0)

11 : 2 = 5 (reszta z dzielenia: 1)

5 : 2 = 2 (reszta z dzielenia: 1)

2 : 2 = 1 (reszta z dzielenia: 0)

1 : 2 = 0 (reszta z dzielenia: 1)

Teraz należy odczytać reszty z dzielenia od dołu do góry, co w rezultacie tworzy 101100012.

Przykład konwersji na liczbę ósemkową (oktalną)

177 : 8 = 22 (reszta z dzielenia: 1)

22 : 8 = 2 (reszta z dzielenia: 6)

2 : 8 = 0 (reszta z dzielenia: 2)

Teraz po odczytaniu reszty z dzielenia od dołu do góry mamy wynik 2618.

Przykład konwersji na liczbę szesnastkową (heksadecymalną)

177 : 16 = 11 (reszta z dzielenia: 1)

11 : 16 = 0 (reszta z dzielenia: 11)

Po odczytaniu reszty z dzielenia od dołu do góry liczbą szesnastkową okazuje się B116. Należy przy tym pamiętać, że w przypadku systemu szesnastkowego liczby od 10 do 15 zmieniają się na litery od A do F.

Uwaga: Warto pamiętać, że w przypadku języków programowania często stosuje się znak % jako operator modulo, a więc taki, który zwraca w formie liczby całkowitej resztę z dzielenia. Z kolei w przypadku pseudokodu stosuje się operator mod, który działa w ten sam sposób. Prezentuje się to następująco: 12 % 7 = 5, 12 mod 7 = 5, bo reszta z dzielenia to właśnie 5. Możliwe jest pobranie konkretnej cyfry z liczby poprzez zastosowanie reszty z dzielenia. Przykładowo 127 mod 10 = 7, a przy tym 127 div 10 = 12, co można dalej dzielić i uzyskiwać konkretne liczby według własnych potrzeb.

Binarny na szesnastkowy i ósemkowy – Przeliczanie systemów liczbowych

W przypadku przeliczania liczb pomiędzy systemami liczbowymi, np. z binarnego na heksadecymalny, najbardziej intuicyjnym rozwiązaniem jest przeliczenie liczby na system dziesiętny, a następnie z dziesiętnego na docelowy.

Jednak konwersja między systemami, gdzie podstawa systemu to potęga liczby 2, również okazuje się prosta do wykonania. Wystarczy skorzystać z tabeli konwersji, która została już wcześniej zaprezentowana (w formie graficznej).

W przypadku zmiany systemu z binarnego na szesnastkowy wystarczy podzielić liczbę dwójkową na czwórki bitów, gdzie każdą z nich przekształca się na liczbę szesnastkową. Stosuje się tu czwórki bitów, bo liczba 2 spotęgowana do 4 równa się 16.

Warto zauważyć, że jeśli cztery bity mają po lewej stronie zera, można je usunąć, co pomoże znaleźć odpowiednią liczbę w tabeli konwersji. Czyli przykładowo 0001 to w tabeli konwersji liczba binarna 1. Możesz też samodzielnie przeliczyć każdą czwórkę na system dziesiętny, a następnie na szesnastkowy. Należy przy tym pamiętać, że bity tworzy się od prawej strony, co widać na poniższym przykładzie.

Jeśli liczba cyfr w wartości binarnej nie jest podzielna przez cztery, wystarczy dodać odpowiednią liczbę zer z lewej strony.

Przykłady konwersji liczb binarnych na szesnastkowe

101100012 = 1011 00012

10112 = B16

00012 = 116

1011 00012 = B116

 

1001012 = 0010 01012

00102 = 216

01012 = 516

0010 01012 = 2516

Przykłady konwersji liczb binarnych na ósemkowe

Praktycznie tak samo jak konwersja liczb dwójkowych na szesnastkowych, działa konwersja na ósemkowe, jednak dzieli się wartość binarną na części po 3 bity. Oczywiście w sytuacji, gdy nie ma odpowiedniej liczby cyfr, dodaje się zera z lewej strony.

110012 = 011 0012

0112 = 38

0012 = 18

011 0012 = 318

 

1101012 = 110 1012

1102 = 68

1012 = 58

110 1012 = 658

Zadania – Przeliczanie systemów liczbowych

1. Zmień poniższe liczby na system dziesiętny za pomocą jednej z wcześniej omówionych metod. Po kliknięciu w zaciemnioną linię pojawi się odpowiedź do danej konwersji.

111002

2810

E816

23210

1318

8910

2. Zmień poniższe liczby z systemu dziesiętnego kolejno na dwójkowy, ósemkowy i szesnastkowy.

35610

1011001002

12710

1778

17310

AD16

Algorytm przeliczania systemów liczbowych – pseudokod, schemat blokowy oraz implementacje

W niektórych zadaniach maturalnych ściśle określono, z jakich typów zmiennych i funkcji można korzystać (najczęściej bez możliwości konwersji na kod ASCII). Dlatego poniżej znajdziesz wersję z wykorzystaniem oraz bez wykorzystania tego typu funkcji. Jeśli nie potrzebujesz konwersji do systemu szesnastkowego (heksadecymalnego), wystarczy Ci wersja bez użycia tablicy ASCII.

W zadaniach maturalnych może pojawić się ograniczenie typu: „Twój algorytm może używać wyłącznie zmiennych przechowujących liczby całkowite oraz może operować wyłącznie na liczbach całkowitych”.

Konwersja systemów liczbowych (binarnego, oktalnego i decymalnego) – bez użycia tablicy ASCII

Poniżej znajdziesz implementację algorytmu przeliczania na systemy liczbowe przy użyciu tylko wartości liczbowych. Ten kod działa dla systemów binarnego, oktalnego i decymalnego, a więc tych, które korzystają z samych cyfr.

Konwersja systemów liczbowych - Schemat blokowy
W pętli dopóki liczba jest większa od zera, funkcja oblicza resztę z dzielenia liczby przez bazaD, aktualizuje wynik, dzieli liczbę przez bazaD, a pozycję mnoży przez bazaZ.

Opis konwersji między systemami liczbowymi – pseudokod

  • 1 linia – definicja funkcji KonwersjaSystemu, która przyjmuje trzy argumenty: liczba (liczba do konwersji), bazaZ (baza liczby źródłowej) i bazaD (baza liczby docelowej),
  • 2 linia – inicjalizacja zmiennej wynik jako zero. Ta zmienna będzie przechowywać wynik konwersji liczby,
  • 3 linia – inicjalizacja zmiennej pozycja jako jeden. Ta zmienna będzie używana do przechowywania wartości pozycji cyfry w docelowym systemie liczbowym,
  • 4 linia – rozpoczyna pętlę, która będzie kontynuowana, dopóki wartość liczby jest większa od zera,
  • 5 linia – obliczenie reszty z dzielenia liczby przez bazę docelową. Ta reszta będzie kolejną cyfrą w docelowym systemie liczbowym,
  • 6 linia – dodanie obliczonej reszty pomnożonej przez wartość pozycji do zmiennej wynik. W ten sposób aktualizujemy wynik konwersji,
  • 7 linia – dzielenie całkowite liczby przez bazę docelową, aby uzyskać kolejną cyfrę do konwersji,
  • 8 linia – pomnożenie wartości pozycji przez bazę źródłową, aby zmienić jej wartość na wartość pozycji kolejnej cyfry w docelowym systemie liczbowym,
  • 9 linia – zwrócenie wyniku końcowego konwersji po zakończeniu pętli.

W tym przypadku mnoży się daną cyfrę z pozycją (1, 10, 100 itd.), dzięki czemu można wstawić cyfrę na konkretną pozycję w ramach danej liczby. Zmienna obsługuje liczbę całkowitą w systemie dziesiętnym, więc ta metoda to proste obejście tego ograniczenia. Czyli przykładowo, gdy posiada się cyfry 4, 7, 6, które należy połączyć ze sobą w tej kolejności, pierwszą z nich mnoży się przez 100, drugą przez 10, a trzecią przez 1 w ramach pętli, po czym dodaje się do siebie. Pozwoli to uzyskać liczbę 476.

Python – implementacja algorytmu

C++ – implementacja algorytmu

Java – implementacja algorytmu

Konwersja na inne systemy liczbowe (binarny, oktalny, decymalny i heksadecymalny) – z użyciem tablicy ASCII

Poniżej znajdziesz implementację wcześniej przedstawionych sposobów na konwersję systemów liczbowych (metody: wzoru oraz reszty z dzielenia). Litery do systemu szesnastkowego pobiera się z tablicy znaków ASCII. Funkcja KodASCII zmienia znak na kod, z kolei funkcja ZnakASCII zmienia kod na znak.

Algorytm zmiana na inny system liczbowy - schemat blokowy
Funkcja ZmianaNaInnySystem, która konwertuje liczbę dziesiętną na liczbę w innym systemie liczbowym o podanej bazie.

Opis konwersji na inne systemy liczbowe – pseudokod

  • 1 linia – definiowana jest funkcja ZmianaNaInnySystem, która przyjmuje dwa argumenty: liczba (liczba, którą chcemy przekonwertować) i baza (system liczbowy, do którego chcemy przekonwertować wartość),
  • 2 linia – inicjalizowana jest zmienna wynik jako pusty ciąg znaków, w którym będziemy budować wynikową liczbę w nowym systemie liczbowym,
  • 3 linia – początek pętli dopóki (odpowiednik while), która będzie działać dopóty, dopóki liczba będzie większa od zera,
  • 4 linia – w każdej iteracji obliczana jest reszta z dzielenia liczba przez baza i przypisywana do zmiennej reszta, co jest kluczowe we wcześniej opisanej metodzie  wykorzystującej resztę z dzielenia (modulo),
  • 5 linia – następnie wartość liczba jest aktualizowana przez podzielenie jej przez zmienną baza (używa się tu dzielenia całkowitego div, bo reszta z dzielenia jest tu niepotrzebna),
  • 6 linia – sprawdza, czy wartość zmiennej reszta jest mniejsza niż 10, żeby zorientować się jakie kody ASCII mają być wykorzystane,
  • 7 linia – jeśli reszta jest mniejsza niż 10, dodaje wartość ASCII znaku 0, KodASCII (“0”) (czyli 48) do reszta i przypisuje wynik do zmiennej znak. Kod ASCII dla cyfry 0 to 48, dla cyfry 1 to 49, itd, aż do cyfry 9, która ma kod 57. Dodając kod ASCII cyfry 0 do reszta, uzyskujemy odpowiedni kod ASCII dla cyfr od 0 do 9,
  • 8 linia – zmienna reszta posiada wartość co najmniej 10 i odpowiada literom od “A” wzwyż w systemach o podstawie większej niż 10 (np. system szesnastkowy, gdzie 10 odpowiada “A”, 11 odpowiada “B”, itd), przez co wykonywana jest instrukcja z kolejnej linii,
  • 9 linia – dodaje wartość kodu ASCII litery A KodASCII (“A”) (czyli 65) do zmiennej reszta i przypisuje wynik do zmiennej znak. Litera “A” w ASCII ma kod 65, co oznacza, że dla zmiennej reszta równej 10, znak powinien wynosić 65 ze względu na odjęcie od reszty wartości 10. Dlatego 65 + 10 – 10 daje 66.
  • 10 linia – do zmiennej wynik dodawany jest znak odpowiadający danej reszcie w systemie liczbowym, a dokładniej znak z tablicy ASCII na pozycji reszta + 48 lub + 55,
  • 11 linia – po przejściu pętli dopóki (while) zwracana jest zmienna wynik, która zawiera przekonwertowaną liczbę w nowym systemie liczbowym.
Python – implementacja konwersji na inny system liczbowy

C++ – implementacja konwersji na inny system liczbowy

Java – implementacja konwersji na inny system liczbowy

Konwersja na system dziesiętny – z użyciem tablicy ASCII

Algorytm zmiana na system dziesiętny - schemat blokowy
Funkcja ZmianaNaDziesietny, która zmienia liczbę z innego systemu liczbowego na system dziesiętny. Wprowadzane są zmienne liczba (liczba w danym systemie liczbowym w formie napisu) oraz baza (baza systemu liczby wprowadzanej).

Opis konwersji na system dziesiętny – pseudokod

  • 1 linia – definicja funkcji ZmianaNaDziesietny z dwoma argumentami: liczba (wartość liczby w innym systemie w formie zmiennej napisowej string), baza (system liczbowy),
  • 2 linia – inicjalizacja zmiennej wynik jako 0. Będzie przechowywać wartość przeliczoną na system dziesiętny,
  • 3 linia – inicjalizacja zmiennej mnoznik jako 1. Pozwoli na umieszczenie cyfr na odpowiednich pozycjach w liczbie. Przykładowo 5 * 1 = 5, a 5 * 10 = 50, jak widać w systemie decymalnym można dowolnie umieszczać liczby na odpowiednich pozycjach za pomocą mnożenia przez 1, 10, 100 itd,
  • 4 linia – rozpoczynamy pętlę dla (odpowiednik for) przechodzącą od długości napisu liczba (wskazany za pomocą funkcji dlugosc) do 1 włącznie, która będzie służyć do iterowania po poszczególnych cyfrach w zmiennej liczba,
  • 5 linia – pobiera wartość ASCII dla znaku liczba [i] (czyli znaku z napisu liczba, o pozycji i).
  • 6 linia – sprawdza, czy WartoscASCII jest w zakresie kodów ASCII dla cyfr 0-9 (48-57).
  • 7 linia – jeśli WartoscASCII jest kodem cyfry (48-57), oblicza jej wartość numeryczną jako WartoscASCII – 48. Przykładowo dla znaku 1 (ASCII 49), wartość będzie 1, bo 49 – 48 = 1.
  • 8 linia – jeśli WartoscASCII nie jest cyfrą, algorytm uznaje, że jest w zakresie kodów ASCII dla liter “A”-”Z” (65-90).
  • 9 linia – jeśli WartoscASCII jest kodem litery, oblicza jej wartość numeryczną jako WartoscASCII – 55. Przykładowo dla znaku “B” (ASCII 66), wartość będzie 11 bo 66 – 55 = 11.
  • 10 linia – Dodaje do zmiennej wynik wartość o pomnożoną przez aktualny mnoznik. To przekształca znak na odpowiednią wartość numeryczną i dodaje ją do wyniku uwzględniając wagę pozycji. Przykładowo wynik = 0 + 5 * 1 = 5.
  • 11 linia – aktualizuje zmienną mnoznik, mnożąc go przez baza. Powoduje to przesunięcie wagi pozycji na wyższą w systemie liczbowym (np. z 1 na 10 w systemie dziesiętnym),
  • 12 linia – po zakończeniu pętli zwracamy ostateczną wartość wynik, która jest wynikiem przekształcenia liczby na system dziesiętny.
Python – implementacja konwersji na system dziesiętny

C++ – implementacja konwersji na system dziesiętny

Java – implementacja konwersji na system dziesiętny

Przeliczanie systemów liczbowych – gotowe funkcje programów Python, C++ i Java

Konkretne języki programowania mają wbudowane funkcje, z których możesz skorzystać w celu konwersji na inne systemy liczbowe. Poniżej znajdziesz ich opis oraz przykłady zastosowania.

Python – wbudowane funkcje

System dziesiętny na inny system liczbowy

Istnieje kilka wbudowanych funkcji, z których można skorzystać w celu zmiany na inny system liczbowy. Chodzi o:

  • bin() – dwójkowy, z prefiksem 0b,
  • oct() – ósemkowy, z prefiksem 0o,
  • hex() – szesnastkowy, z prefiksem 0x.

Warto jednak zauważyć, że po zmianie wartości na inny system liczbowy pojawia się odpowiedni prefiks, którego można się pozbyć za pomocą slicingu lub lstrip().

Inny system liczbowy na system dziesiętny

Można w tym celu użyć funkcji int() wraz z podaniem bazy systemu liczbowego.

C++ – wbudowane funkcje

System dziesiętny na inny system liczbowy

Aby przekształcić liczbę z systemu dziesiętnego na inny system liczbowy, można użyć funkcji std::stringstream wraz z manipulatorem std::oct dla systemu ósemkowego, std::hex dla systemu szesnastkowego lub manipulatora std::bitset dla systemu binarnego.

Inny system liczbowy na system dziesiętny

Aby przekształcić liczbę z innego systemu liczbowego na system dziesiętny, można użyć funkcji std::stoi wraz z podaniem bazy systemu liczbowego.

Java – wbudowane funkcje

System dziesiętny na inny system liczbowy

Można też użyć metody Integer.toOctalString(), Integer.toHexString() i Integer.toBinaryString() odpowiednio dla systemów ósemkowego, szesnastkowego i binarnego.

Inny system liczbowy na system dziesiętny

Można użyć konstruktora Integer.parseInt() wraz z podaniem bazy systemu liczbowego.

QUIZ – Sprawdź swoją wiedzę

Najczęściej zadawane pytania o systemy liczbowe

Jakie są systemy liczbowe w informatyce?

W informatyce najczęściej używane są systemy liczbowe: binarny (dwójkowy), ósemkowy (oktalny) i szesnastkowy (heksadecymalny). Pozwalają one efektywnie reprezentować dane oraz działać na nich.

Ile jest systemów liczbowych?

Teoretycznie istnieje nieskończona liczba pozycyjnych systemów liczbowych, ale w praktyce najczęściej spotykane są systemy liczbowe takie jak dziesiętny (decymalny), dwójkowy (binarny), ósemkowy (oktalny) oraz szesnastkowy (heksadecymalny).

Jak dzielimy systemy liczbowe?

Systemy liczbowe dzieli się na dwa rodzaje:

  • Addytywne (niepozycyjne) – liczby tworzone są poprzez dodawanie do siebie wartości kolejnych symboli (przykładowo system rzymski czy egipski),
  • Pozycyjne – jak sama nazwa wskazuje, w przypadku tych systemów istnieje ograniczony zbiór symboli, których wartość zależy od miejsca, na które zostaną wstawione.
Jakiego systemu liczbowego używa komputer?

Komputery używają systemu liczbowego binarnego (dwójkowego), ponieważ są one oparte na układach cyfrowych operujących na sygnałach elektrycznych (0 – brak sygnału i 1 – obecny sygnał). Wszystkie dane są przechowywane i przetwarzane w postaci binarnej.

Jakie są kody liczbowe?

Niektórzy mówią tak na systemy liczbowe. Wśród najczęściej stosowanych pozycyjnych systemów liczbowych można wymienić dziesiętny (decymalny), dwójkowy (binarny), ósemkowy (oktalny) oraz szesnastkowy (heksadecymalny). Jednak innym chodzi o tablicę kodów ASCII, BCD (Binary-Coded Decimal), Graya, U1 czy U2.

Czy istnieje system jedynkowy?

Oczywiście, że istnieje system jedynkowy, jest to jednak najbardziej prymitywny ze wszystkich systemów liczbowych, ponieważ występuje w nim tylko jeden znak (pionowa kreska lub 1). Wystarczy powtórzyć ten symbol, żeby uzyskać konkretną liczbę. Przykładowo dla odwzorowania wartości 4 należy użyć czterech pionowych kresek lub 1111. Co ciekawe, jest to system liczbowy, z którego korzysta się przy liczeniu na palcach. Wcześniej używano go, ryjąc kreski na kościach czy glinianych tabliczkach, a także plotąc węzełki na sznurkach.

To prosty system liczbowy, znajdujący zastosowanie dla niewielkich liczb. W przypadku większych wartości można go było usprawnić poprzez zbieranie wartości w mniejsze podzbiory, np. po pięć. Wówczas – wiedząc, że jedna grupka kresek to liczba 5 – wystarczyło policzyć powstałe w ten sposób zbiory, żeby uzyskać ostateczny wynik (przykładowo 5 zbiorów po 5 kresek to wartość 25).

ads banner