/


Poprzedni temat «» Nastpny temat
Systemy liczbowe - jak się to robi.
Autor Wiadomo
Borcejn
Rozgadana



Imi: Rozgadana
Pomg: 3 razy
Doczy: 15 Lut 2012
Posty: 478
Skd: Rozgadana

Wysany: 2013-02-19, 21:18   Systemy liczbowe - jak się to robi.

W opracowaniach naukowych, czy w Internetowych samouczkach, łatwo możemy znaleźć materiały dotyczące systemów liczbowych, jednak informacje te często są nazbyt szczegółowe. Oczywiście warto wiedzieć, dlaczego coś działa, ale gdy kupujemy pralkę, to najpierw zainteresujemy się jej kolorem, wielkością bębna oraz zużyciem prądu, a zagłębianie się w technologię wykonania rezystorów z uzwojeniem bifilarnym w hybrydowym układzie scalonym średniej skali integracji odłożymy sobie na potem. Zatem dzisiaj postaram się wyłożyć tę "praktyczniejszą" stronę wiedzy, w sposób jak najbardziej klarowny.

1. Problem rzymskich producentów pasty.

Piszesz do Gajusza, by przesłał Ci 111 ziarenek piasku. Ten wysyła, ale trzy. Uznajesz go za idiotę. Zwracasz się do Ulpiana z identyczną prośbą. Dostajesz kopertę, a w niej... znowu trzy ziarenka piasku. Kto tu jest głupi?

Ty, nioch! Zapomniałeś, że w Rzymie wartość liczby zależy od ilości znaczków:

111 = 1 + 1 + 1 = 3

Żeby napisać "sto jedenaście" po rzymsku, musisz użyć stu jedenastu kresek (jedności)...

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

...lub użyć znaczków, które mają większą wartość np. V, X, L, C, itd.

Spoko. Potrafisz już konstruować liczby. Otwierasz zakład produkujący pasty wybielające. Ponownie kierujesz do Gajusza prośbę, lecz tym razem, o 156 345 754 452 ziarenek piasku. Tu masz problem, bo ilość atramentu w piórze jest ograniczona : ). Zaczynasz więc tworzyć:

Sto miliardów oznaczę jako ζ, 50 miliardów - Γ, 5 miliardów - η, miliard - ♥, sto milionów - §, 50 milionów - ø, pięćset tysięcy - ©, sto tysięcy - ƒ... (...) to będzie jakieś...
"Proszę o przesłanie ζΓη♥§§§√ø©ƒƒ≥»MMMMCDLII ziarenek pia... hm."


2. Rewolucja - system pozycyjny!

M.in ten problem zapisu wielkich liczb rozwiązali babilończycy. Otóż, wymyślili sobie, że zamiast uzależniać wartość liczby od ilości cyferek, uzależnią ją od ich pozycji. Pomysł został podrasowany przez Egipcjan, aż ostatecznie Hindusi dopieścili system, którym posługujemy się codziennie - pozycyjny, dziesiątkowy.

Na ów system składa się dziesięć cyfr: 1,2,3,4,5,6,7,8,9 oraz 0.
Aby zapisać w nim coś większego niż 9, wystarczy ustawić cyfry na odpowiednich pozycjach.

38

Mówimy, że (mianując od prawej do lewej) trójka jest na pierwszej pozycji, a ósemka na zerowej, natomiast wartość liczby wyrażamy sumą wartości cyfr na wszystkich pozycjach.

wp = cyfra × podstawa systemu ^ pozycja.

Podstawa systemu, to ilość cyfr w danym systemie (w dziesiętnym jest ich... 10).
Po obliczeniu, ile dana cyfra na danej pozycji znaczy i zsumowaniu tych wartości otrzymujemy:

(3 × 10^1) + (8 × 10^0) = 38. Działa!

Zapiszemy w ten sposób inne liczby:

(6 × 10^2) + (4 × 10^1) + (3 × 10^0) = 643.
(4 × 10^3) + (0 × 10^2) + (9 × 10^1) + (0 × 10^0) = 4090.


Spróbuj analogicznie rozpisać poniższą liczbę ziarenek piasku w systemie dziesiętnym:

156345754452 = (1 × 10 ^ 11) + (5 × 10^10) + ...

3. Czy tylko dziesięć?

Wykazaliśmy więc, że system pozycyjny jest wygodny i pozwala m.in na zapisywanie ogromnych liczb w sposób czytelny. Jednak czy podstawą systemu musi być dziesięć? Czy nie można byłoby np. spocząć na dwóch cyfrach, np. 0, 1, tzn. stworzyć system o podstawie 2?

Można. Można stworzyć system o dowolnej podstawie liczbowej, nawet 90, czy 450, wymyślając coraz to nowsze, dziwaczniejsze cyfry. Jednak tylko niektóre znajdują konkretne zastosowania. Wśród nich jest właśnie system dwójkowy - niezbędny dla komputerów. Bo to są głupie kupy złomu, które rozumieją tylko "jest prąd" (1) i "jest mały prąd" (0). Poważnie. Mózg komputera operuje tylko na tych dwóch sygnałach - cyfrach. Spróbujmy zatem przekształcić procesorowe liczby na nasze, swojskie, w systemie dziesiętnym. Ponieważ jest to system pozycyjny, korzystamy z tego samego wzoru, pamiętając tylko, że teraz podstawą systemu jest 2.

1011 (2) = (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 11(10)
110100 (2) = (1 * 2^5) + (1 * 2^4) + (0 * 2^3) + (1 * 2^2) + (0 * 2^1) + (0 * 2 ^0) = 52(10)


Zauważmy, że zapis ten można uprościć, gdyż jedynka jest dla mnożenia neutralna, a miejsca z zerami wystarczy pominąć.

110100(2) = 2^5 + 2^4 + 2^2 = 52(10)

Fajnie, a teraz w drugą stronę - mamy liczbę 52(10) - jak zamienić ją na system binarny?
Najprostszym sposobem jest dzielenie liczby przez podstawę systemu z resztą.
Dzielenie z resztą to sprawiedliwe rozdzielanie trzech jabłek pomiędzy dwóch braci bez użycia noża - jedno wyrzucamy za siebie.
Miejsce "za sobą" będziemy oddzielać znakiem "|".

Liczba : podstawa systemu | reszta

Zamiana na dwójkowy:

52 : 2 | 0
26 : 2 | 0
13 : 2 | 1
6 : 2 | 0
3 : 2 | 1
1 : 2 | 1


Koniec! Wynik spisujemy od dołu do góry -> 110100(2). Wszystko się zgadza.

Zamiana na piątkowy (np. dla jednoręcznych :crazy: ):

52 : 5 | 2
10 : 5 | 0
2 : 5 | 2


Jest! Otrzymaliśmy 202(5). Sprawdzimy, czy dobrze, zamieniając z powrotem?
Pamiętamy, jak to szło: cyfra × podstawa systemu ^ pozycja... jedziemy:

(2 × 5^2) + (0 × 5^1) + (2 × 5^0) = 52. Jest OK.

Wszystko da się przy małych liczbach, jednak co z komputerem, który operuje na szerszych słowach, np. 16 bitowych?:

1101001011011010(2)

Znowu napotykamy problem z długością zapisu (zupełnie jak u Rzymian)! Łatwo przecież przepisując taką długą liczbę coś przestawić, zgubić, zmienić zero na jedynkę... aby zredukować ryzyko, długie liczby binarne zapisuje się w systemie ósemkowym lub (częściej) - w szesnastkowym. Najprostszym sposobem zamiany liczby binarnej na liczbę ósemkową jest podzielenie słowa binarnego na grupy po trzy (bo 2^3 = 8) i "wyciągnięcie" z powstałych grup pojedynczych cyferek. Liczbę zawsze ciachamy od prawej do lewej, gdyż w przypadku liczby niepodzielnej, należy "dopełnić" ją zerami.

001|101|001|011|011|010(2)
Z poszczególnych kawałków otrzymujemy:
|1| |5| |1| |3| |3| |2|, czyli 151332(8)


Przy zamianie na system szesnastkowy (heksadecymalny) postępujemy podobnie, tyle że ciachamy na grupy co cztery, no i operujemy na cyfrach od 0 do 15 (zatem mamy do dyspozycji 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, oraz F).

|1101|0010|1101|1010(2)
Tym sposobem:
|D| |2| |D| |A|, czyli D2DA(16).


Liczbę binarną można szybko zamienić na każdy system o podstawie 2 ^ n oraz odwrotnie.

4. Szkolne działania

Możliwość łatwego zapisu wielkich liczb, to spore, acz niejedyne korzyści płynące z zastosowania systemu pozycyjnego. Dzięki niemu możemy również z łatwością wykonywać operacje arytmetyczne, co nie jest przecież możliwe w systemie rzymskim (spróbuj obliczyć iloraz CXII i V bez konwersji na system pozycyjny).

Aby dodawać, odejmować, dzielić i mnożyć dwie lub więcej liczb, powinniśmy je sprowadzić do jednej podstawy (chyba, że w konkretnym przypadku znamy jakieś magiczne algorytmy postępowania, które nierzadko tylko komplikują pracę). Przejście pomiędzy systemami dwójkowym, czwórkowym, ósemkowym, szesnastkowym, trzydziestkodwójkowym itd. jest zasadniczo proste, co już pokazałem, jednak czasem warto chwilę się zastanowić przy tych naszych rozpiskach, bo można sobie niepotrzebnie dołożyć pracy. Np. przy dodawaniu liczb binarnej i szesnastkowej, rozsądniej zamienić binarną na szesnastkową niż odwrotnie - w przeciwnym wypadku będziemy mieli ciekawą i długą mieszanko - wykreślankę zer i jedynek.

Dodawanie A8 do D9 wydaje się dla nas dziwaczne, jednak obowiązują nas dokładnie identyczne zasady. Trzeba sobie jednak uświadomić, że nie przenosimy żadnego "jeden dalej", jak to nas uczyła Pani w podstawówce, tylko "podstawę systemu liczbowego dalej" (w tym przypadku 16). Innymi słowy - jedynka na drugim miejscu nie oznacza zawsze dziesięć. Ona oznacza (1 * podstawa systemu^1). Tak samo z dzieleniem, mnożeniem, odejmowaniem...



Na koniec, dobre słowo - jeżeli pogubisz się w tych obliczeniach, bo np. liczby są spore, porzuć swoją elastyczność umysłu. W ostateczności zawsze możesz zamienić obie liczby na decymalne i sprawa będzie banalna - w końcu wszyscy grzebiemy w nich od dziecka. Co więcej - wielkich liczb z pewnością nikt nigdy nie każe Ci mnożyć czy dzielić z ołówkiem w ręku.

Miłego!
  
 
 
Seventh Sign
.



Imi: ---
Zaproszone osoby: 1
Pomoga: 1 raz
Doczya: 27 Sty 2013
Posty: 300
Skd: ---

Wysany: 2013-02-23, 16:35   

Mnie łatwiej posługiwać się systemem szesnastkowym gdy daną liczbę dzielę w słupku, a potem po prostu zapisuję od końca. W inny sposób tego nie ogarniam :3

[ Dodano: 2013-02-23, 16:57 ]
Poza tym nie pomyliłeś się?


1011 (2) = (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^1) = 11(10)

Po rozpisaniu tego wychodzi

1011 = 8+0+2+2 = 12

Poza tym to ostatnia cyfra od lewej, więc powinna wyglądać cyfra * podstawa^0 i wtedy wszystko się zgadza

1011 (2) = (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 11(10), bo
1011= 8+0+2+1=11


ZROZUMIAŁAM szesnastkowy.
 
 
Borcejn
Rozgadana



Imi: Rozgadana
Pomg: 3 razy
Doczy: 15 Lut 2012
Posty: 478
Skd: Rozgadana

Wysany: 2013-02-23, 19:12   

Racja, jedynka jest na pozycji zerowej, więc wykładnik jest równy zero.
Dzięki za dostrzeżenie tej literówki, a może raczej cyfrówki.

Seventh Sign napisa/a:
Mnie łatwiej posługiwać się systemem szesnastkowym gdy daną liczbę dzielę w słupku, a potem po prostu zapisuję od końca. W inny sposób tego nie ogarniam :3
Da radę, jednak czasami dzielenie przez 16 jest trudniejsze pamięciowo, niż przez 2, a późniejsze przejście z liczby binarnej do szesnastkowej jest kwestią kilku sekund. Chyba, że operujemy na skromnych liczbach:

Kod:
52 : 16 | 4
3 : 16 | 3

= 34 (16)

Tak czy owak, człowiek po nabraniu wprawy mnoży. Gdy zamieniam liczbę 52 na binarną, myślę 1,2,4,8,16,32... | 32 + 16 + 4 | 11010 (oczywiście w pewnym uproszczeniu, bo ja nie myślę, tylko widzę). :crazy:
 
 
Seventh Sign
.



Imi: ---
Zaproszone osoby: 1
Pomoga: 1 raz
Doczya: 27 Sty 2013
Posty: 300
Skd: ---

Wysany: 2013-02-23, 19:15   

Spoko, nauczyłam się już i odwiedziłam temat z historyczną zabawą. Zapisałam kilka kartek A4, nabrałam wprawy i umiem.
 
 
Wywietl posty z ostatnich:   
Odpowiedz do tematu
Nie moesz pisa nowych tematw
Nie moesz odpowiada w tematach
Nie moesz zmienia swoich postw
Nie moesz usuwa swoich postw
Nie moesz gosowa w ankietach


Wersja do druku

Skocz do: