niedziela, 3 marca 2013

Systemy liczbowe cz. 1: System binarny

Przed chwilą wpadł mi do głowy pomysł, że mógłbym utworzyć tu małą podstronę z różnymi rodzajami poradników, tutoriali czy też mini-kursów. Może na razie jako wypełnienie zacznę od czegoś prostego i podstawowego. Według mnie czymś takim jest system binarny.

System binarny jest to inaczej dwójkowy system liczbowy, albo też binarny system pozycyjny. Jak zwał tak zwał. W każdym bądź razie polega on na tym, że podstawą tego systemu jest liczba 2. Oznacza to, że znajdują się w nim tylko 2 cyfry: 0 i 1. Za pomocą tych cyfr można przedstawić każdą liczbę z systemu dziesiętnego, czyli tego który jest nam najbliższy. System binarny leży u podstaw działania komputerów, które tak naprawdę nie potrafią rozróżnić innych stanów niż włączony (1) i wyłączony (0). Tyle słowem wstępu. 

Zamiana liczb z systemu dziesiętnego na system dwójkowy jest bardzo prosta. Polega ona na dzieleniu całkowitym liczby zapisanej w systemie dziesiętnym przez 2 i zapisywaniu reszt z tego dzielenia. Najłatwiej zobrazować to na przykładzie. Zamienimy teraz liczbę 5 tak aby można było ją przedstawić za pomocą systemu dwójkowego:

5 dzielimy na 2 zostaje nam 2 reszty 1
2 dzielimy na 2 zostaje nam 1 reszty 0
1 dzielimy na 2 zostaje nam 0 reszty 1

Zapisujemy reszty od końca i wychodzi nam: 101. Jest to binarna reprezentacja liczby 5.  Przeliczając liczbę na kartce najłatwiej będzie stosować taki zapis:

5 | 1 = 101
2 | 0
1 | 1
0 |

Inne przykłady: 

 25 | 1  = 101001      44 | 0  = 101100      64 | 0  = 1000000     
 12 | 0                22 | 0                32 | 0 
  6 | 0                11 | 1                16 | 0
  3 | 1                 5 | 1                 8 | 0
  2 | 0                 2 | 0                 4 | 0
  1 | 1                 1 | 1                 2 | 0
  0 |                   0 |                   1 | 1
                                              0 |   

Zamiana w drugą stronę także nie jest trudna. Najprościej wykorzystać do tego celu tzw. schemat Hornera. (Jak dokładnie działa dowiesz się w moim następnym poście.) Na przykładzie 5 wygląda to mniej więcej tak:

(((1)*2 + 0)*2 + 1) = 5

Równie dobrze mógłbym to zapisać jako (^ odpowiada za potęgę, 2^2 oznacza 2 do potęgi 2 (do kwadratu)):

 1*2^2 + 0*2^1 + 1*2^0  =  5

Oba zapisy są równoważne, jednak zapis wykorzystujący schemat Hornera jest prostszy w obliczeniu. Ogólnie zamiana polega na tym, że przepisujemy pierwszy bit (najmniejsza jednostka w komputerze, może przechowywać tylko 1 lub 0, 8 bitów daje 1 bajt) i mnożymy go razy dwa. Do wyniku dodajemy drugi bit i wynik ten znowu mnożymy razy dwa i tak do końca (ostatni bit jedynie dodajemy, po nim nie mnożymy już wyniku razy dwa). 

Można z tego wywnioskować, że ostatni bit odpowiada za to czy liczba jest nieparzysta czy też parzysta. Jeśli jest 1 to liczba jest nieparzysta (gdyż na końcu zamiany dodajemy 1) a jeśli 0 to parzysta (nic nie dodajemy). 

Do czego przyda nam się ta wiedza? Nawet nie wiesz jak często korzysta się z niej podczas programowania. Im więcej będziesz programował tym częściej będziesz się z tym spotykał. Dodatkowo możesz ją tak naprawdę wykorzystać do każdego innego systemu pozycyjnego np. przy systemie ósemkowym zamiast przez dwa liczbę dzielimy przez osiem, przy szesnastkowym przez 16 np.:

25 | 1 = 031 gdyż: ((3)*8+1) = 25 
 3 | 3 
 0 |  
 
25 | 9 = 0x19 gdyż ((1)*16 + 9) = 25
 1 | 1
 0 |

Zapamiętaj, że przyjęło się, że liczbę w systemie ósemkowym poprzedzamy znakiem 0 a liczbę zapisaną w systemie szesnastkowym znakami 0x. Łatwiej jest wtedy rozróżnić od siebie te zapisy. Postaraj się też pamiętać, że system szesnastkowy zawiera w sobie cyfry od 0 do 9 oraz litery od A do F (gdzie A oznacza 10, B = 11 itd.).  



Brak komentarzy:

Prześlij komentarz

Pamiętaj aby Twoje komentarze były zawsze kulturalne i zgodne z obowiązującą Netykietą. Nie przeklinaj, nie obrażaj i nie wyzywaj innych użytkowników. PS: Nie karm troli.