Robota Komornicza

System pozycyjny

Codziennie posługujemy się systemem dziesiętnym zwanym inaczej decymalnym. Jest to system pozycyjny co oznacza, że liczba składa się z cyfr, których wartość zależy od pozycji oraz podstawy systemu. Rozpatrzmy przykładowo liczbę 123. System dziesiętny ma podstawę 10 czyli możemy liczbę zapisać jako:

123 = 100 + 20 + 3 = 1·102 + 2·10 + 3·100

Łatwo zauważyć, że cyfra na i-tej pozycji od prawej strony ma wartość i-ta cyfra pomnożona przez 10 do i-1.

Inne systemy pozycyjne

System pozycyjny może mieć dowolną podstawę n. Oznacza to, że na dowolnej pozycji mamy n różnych sposobów zapisania cyfry. Rezultatem tego jest, że liczba na i-tej pozycji od prawej strony ma wartość i-ta cyfra pomnożona przez n do i-1. W celu odróżnienia liczb w różnych system zapisach przyjmuje się, że liczba a o bazie n zapisuje się jako an.

Przykłady systemów

 

SystemInaczejPodstawaCyfryPrzykład użycia
dwójkowy binarny 2 0, 1 system binarny jest podstawą wszystkiego związanego z informatyką
ósemkowy oktalny 8 0 - 7 w system UNIX do reprezentowania poziomu dostępu do pliku
szesnastkowy heksadecymalny 16 0 - 9, A - F określanie koloru podczas stylizowania strony

 

Przeliczanie systemu dziesiętnego na inny

Weźmy liczbę a z systemu dziesiętnego. Chcąc przeliczyć ją do innego systemu o podstawie n należy:

  1. Podziel liczbę przez n i pobierz resztę z dzielenia.
  2. i-tym kroku zapisz cyfrę na i-tej pozycji od prawej strony
  3. Jeśli a jest różne od 0 to wróć do (1.)

 

Przykład

Weźmy przykładowo liczbę 21, które chcemy przeliczyć na system binarny:

IteracjaOperacjaWynikAktualna liczba
#1 21 / 2 10 r. 1 1
#2 10 / 2 5 r. 0 01
#3 5 / 2 2 r. 1 101
#4 2 / 2 1 r. 0 0101
#5 1 / 2 0 r. 1 10101

Liczba a wynosi już 0, więc nie wykonujemy iteracji #6. W ten sposób odczytujemy, że 2110 = 101012.

Inny system na dziesiętny

Weźmy liczbę a o bazie n. Chcąc przeliczyć ją do systemu dziesiętnego należy zsumować wartości wszystkich cyfr liczby pamiętając, że i-ta cyfra ma wartość i-tej cyfry pomnożona przez ni-1.

Weźmy przykładowo 101213. Chcąc przeliczyć wyliczamy kolejne pozycje:1·34 + 0·33 + 1·32 + 2·3 + 1·30 = 81 + 0 + 9 + 6 + 1 = 97. Z tego możemy odczytać, że 101213 = 9710.

Przeliczanie między dowolnymi systemami

Załóżmy, że mamy liczbę a z systemu m i chcemy przeliczyć ją na system n. Dokonujemy tego:

  1. Zamieniając liczbę a z systemu m na dziesiętny
  2. Powstałą liczbę przeliczamy na system n

 

Przykładowo chcemy przeliczyć 183 na system ósemkowy:

183 = 1·3 + 8 = 1110

IteracjaKrok 1Krok 2Aktualna liczba
#1 11 / 8 1 r. 3 3
#2 1 / 8 0 r. 1 13

 

Z tego odczytujemy, że 183 = 138.

Szybka konwersja - binarny na ósemkowy

Algorytm wygląda następująco:

  1. Począwszy od prawej grupujemy cyfry liczby binarnej po 3
  2. Każdą grupkę zamieniamy na system ósemkowy

 

Przykładowo zamienimy liczbę 101011112:

 

KrokLiczba
#0 101011112
#1 0102 1012 1112
#2 210 510 710
#3 2578

Analogicznie wykonujemy zamianę systemu binarnego na szesnastkowy.

 

Szybka konwersja - szesnastkowy na binarny

Algorytm wygląda następująco:

  1. Każdą cyfrę przeliczamy na system binarny

 

Przykładowo zamienimy liczbę 2116:

KrokLiczba
#0 2116
#1 210 110
#2 00102 01012
#3 1001012


W ten sposób wyliczamy, że 2116 = 1001012.

 

Różne systemy liczbowe w C++

C++ pozwala wprowadzać bezpośrednio liczby w systemie ósemkowym, dziesiętnym i szesnastkowym. System dziesiętny wprowadzamy bez zastanowienia:

  1. int a = 75; // a = 75

W przypadku, gdy chcemy wprowadzić liczbę w systemie ósemkowym to na początku liczby używamy 0:

  1. int a = 075; // a = 61

Z kolei dla systemu szesnastkowego jest to 0x:

  1. int a = 0x75; // a = 117

Implementacja przeliczania

Wartość cyfry

Ze względu na różne liczby to będziemy przechowywać ich wartości w tablicy char*. W ten sposób będziemy mogli wprowadzić liczbę nawet w systemie szesnastkowym. Taki sposób zapisu nie pozwala na wykonywanie operacji arytmetycznych, ponieważ każda cyfra będzie miała wartość ASCII, a nie dziesiętną, dlatego stworzymy funkcję pomocniczą getIntValue().

Dwójkowy Dziesiątkowy Osemkowy szestnastkowy
1101 15 13 D
101010 52 42 2A
10101010 252 170 AA
11110000 360 240 F0


Dodaj komentarz






Dodaj

© 2013-2024 PRV.pl
Strona została stworzona kreatorem stron w serwisie PRV.pl