Dwójkowy system liczbowy
(inaczej binarny) to pozycyjny system liczbowy, w którym podstawą pozycji są kolejne
potęgi liczby 2. Do zapisu liczb potrzebne są więc tylko dwa znaki: 0 i 1. Powszechnie używany w
informatyce. Jak w każdym pozycyjnym systemie liczbowym, liczby zapisuje się tu jako ciąg cyfr,
z których każda jest mnożnikiem kolejnej potęgi liczby stanowiącej podstawę systemu.
Np. liczba zapisana w dziesiętnym systemie liczbowym jako 10, w systemie dwójkowym przybiera
postać 1010, gdyż:
1x23 + 0x22 + 1x21 + 0x20 = 8+2 = 10.
Obliczanie wartości dziesiętnej liczby zapisanej w systemie dwójkowym
111102= 11110
= 1x24 + 1x23 + 1x22 + 1x21 + 0x20 = 1 x 16 + 1 x 8 + 1 x 4 + 1 x 2 + 0 x 1 = 16
+ 8 + 4 + 2 = 30
Jedynka podobnie jak w systemie dziesiętnym ma różne wartości w zależności od swojej pozycji -
na końcu oznacza 1, na drugiej pozycji od końca 2, na trzeciej 4, na czwartej 8, itd. Ponieważ 0 x
2n=0, oraz 1 x 2n = 2n, aby obliczyć wartość liczby zapisanej dwójkowo, wystarczy zsumować
potęgi dwójki odpowiadające cyfrom 1 w zapisie.
Obliczanie wartości binarnej liczby zapisanej w systemie dziesiętnym
Zamiana 3010 na liczbę w systemie dwójkowym:
30 ÷ 2 = 15 reszty 0
15 ÷ 2 = 7 reszty 1
7 ÷ 2 = 3 reszty 1
3 ÷ 2 = 1 reszty 1
1 ÷ 2 = 0 reszty 1
Aby obliczyć wartość dwójkową liczby przepisujemy od końca reszty, które nam wyszły.
Tak więc 3010 = 111102.
127 ÷ 2 = 63 reszty 1 19 ÷ 2 = 9 reszty 1
63 ÷ 2 = 31 reszty 1 9 ÷ 2 = 4 reszty 1
31 ÷ 2 = 15 reszty 1 4 ÷ 2 = 2 reszty 0
15 ÷ 2 = 7 reszty 1 2 ÷ 2 = 1 reszty 0
7 ÷ 2 = 3 reszty 1 1 ÷ 2 = 0 reszty 1
3 ÷ 2 = 1 reszty 1
1 ÷ 2 = 0 reszty 1
12710 = 11111112 1910 = 100112
Działania na liczbach w systemie dwójkowym
111111
1111111
+ 10011
10010010
Operacja jest podobna do dodawania w systemie dziesiętnym, ale potrzebuje mniej
informacji o sumach cyfr. Dość zapamiętać sobie, że jeśli w słupku musimy dodać dwie jedynki, to
jest to sytuacja analogiczna do tej, jaka występuje w systemie dziesiętnym gdy musimy dodać dwie
piątki. A więc 1 i 1 to 0 i 1 w pamięci . Wszystkie pozostałe operacje, jakie można spotykać przy
takim dodawaniu, zawierajÄ… dodawanie zera i dlatego sÄ… bardzo proste.
Odejmowanie też jest bardzo proste, na przykład:
1111111
- 10011
1101100
A w takiej sytuacji pożyczamy jedynkę:
11101
- 10110
00111
(zera z lewa, oczywiście, można wykreślić).
Mnożenie i dzielenie wykonuje się w systemie dwójkowym również podobnie do
wykonania tych operacji w systemie dziesiętnym. Potrzebna dla tych działań tabelka mnożenia jest
jeszcze prostszą za tabelkę dodawania, ponieważ mnoży się tylko 0 i 1: mnożenie na 0 da 0,
mnożenie na 1 nie zmienia liczby.
Naturalny system dwójkowy (ang. NBS - Natural Binary System) jest najprostszym
systemem pozycyjnym, w którym podstawa p = 2. System posiada dwie cyfry 0 i 1, zatem można je
kodować bezpośrednio jednym bitem informacji. Wartość liczby obliczamy zgodnie ze wzorem
podanym w rozdziale o systemach pozycyjnych.
Wartość dziesiętna liczby zapisanej w naturalnym kodzie binarnym
bn-1bn-2...b2b1b0 = bn-12n-1 + bn-22n-2 + ... + b222 + b121 + b020
gdzie
b - bit, cyfra dwójkowa 0 lub 1
n - liczba bitów w zapisie liczby
Obliczyć wartość liczby dwójkowej 11100101(2).
11100101(2) = 1 x 27 + 1 x 26 + 1 x 25 + 0 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 1 x 20
11100101(2) = 1 x 128 + 1 x 64 + 1 x 32 + 0 x 16 + 0 x 8 + 1 x 4 + 0 x 2 + 1 x 1
11100101(2) = 128 + 64 + 32 + 4 + 1
11100101(2) = 229(10)
Jeśli dokładnie przyjrzysz się powyższym obliczeniom, to na pewno zauważysz, iż w
systemie binarnym w celu obliczenia wartości liczby wystarczy po prostu zsumować
wagi pozycji, na których cyfry przyjmują wartość 1.
101011(2) = 25 + 23 + 21 + 20 = 32 + 8 + 2 + 1 = 43(10)
Jest to znaczne uproszczenie w stosunku do innych systemów, gdzie musimy
wykonywać mnożenia cyfr przez wagi pozycji. Tutaj albo dana waga występuje w
wartości liczby (cyfra 1), albo nie występuje (cyfra 0). Nie na darmo system binarny
jest najprostszym systemem pozycyjnym.
Bardzo ważne dla informatyka i programisty jest nauczenie się na pamięć pierwszych
szesnastu liczb binarnych:
dziesiętnie 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
dwójkowo 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
Określmy, jaką największą liczbę dwójkową możemy zapisać za pomocą n bitów (czyli
cyfr binarnych). Największa liczba musi posiadać same cyfry 1, czyli w wartości liczby
muszą uczestniczyć wszystkie wagi pozycji. Zatem:
dla 1b mamy 1(2) = 1(10)
dla 2b mamy 11(2) = 2 + 1 = 3(10)
dla 3b mamy 111(2) = 4 + 2 + 1 = 7(10)
dla 4b mamy 1111(2) = 8 + 4 + 2 + 1 = 15(10)
Otrzymujemy kolejne liczby:
1
dla 1b mamy
3
dla 2b mamy
7
dla 3b mamy
15
dla 4b mamy
Liczby te tworzą prosty ciąg potęgowy:
dla 1b mamy 1 = 21 - 1
dla 2b mamy 3 = 22 - 1
dla 3b mamy 7 = 23 - 1
dla 4b mamy 15 = 24 - 1
Wykładnik potęgowy liczby 2 jest równy ilości bitów, zatem dla n bitów otrzymujemy
wzór:
Zakres n bitowej liczby w naturalnym kodzie dwójkowym wynosi
Z(2) = <0, 2n - 1>
Jaką największą liczbę dziesiętną można przedstawić przy pomocy 64 bitów?
Odp.
264 - 1 = 18446744073709551616 - 1 = 18446744073709551615
Schemat Hornera pozwala obliczyć wartość liczby binarnej przy minimalnej ilości
operacji arytmetycznych. W systemie binarnym schemat ten jest bardzo prosty:
Schemat Hornera dla systemu binarnego
Wejście: ciąg cyfr binarnych
Wyjście: W - wartość liczby reprezentowanej przez ciąg cyfr binarnych
krok 1: W pierwsza cyfra
krok 2: dopóki są kolejne cyfry wykonujemy operację W 2 x W + kolejna cyfra
krok 3: Kończymy
Operację mnożenia 2 x W możemy zastąpić dodawaniem W + W. Dodawanie komputer
wykonuje o wiele szybciej od mnożenia.
Obliczyć schematem Hornera wartość liczby binarnej 111010111101(2)
cyfra 1: W = 1
cyfra 1: W = (1 + 1) + 1 = 3
cyfra 1: W = (3 + 3) + 1 = 7
cyfra 0: W = (7 + 7) + 0 = 14
cyfra 1: W = (14 + 14) + 1 = 29
cyfra 0: W = (29 + 29) + 0 = 58
cyfra 1: W = (58 + 58) + 1 = 117
cyfra 1: W = (117 + 117) + 1 = 235
cyfra 1: W = (235 + 235) + 1 = 471
cyfra 1: W = (471 + 471) + 1 = 943
cyfra 0: W = (943 + 943) + 0 = 1886
cyfra 1: W = (1886 + 1886) + 1 = 3773 - koniec
Kolejne od końca cyfry binarne zapisu liczby w systemie dwójkowym otrzymamy jako
reszty z dzielenia tej liczby przez 2. Metoda ta została dokładnie opisana w rozdziale
poświęconym przeliczaniu liczb dziesiętnych na zapis w innych systemach liczbowych.
Algorytm wyznaczania cyfr zapisu dwójkowego liczby
Wejście: W - wartość liczby
Wyjście: ciąg cyfr binarnych reprezentujących w systemie dwójkowym wartość W
krok 1: kolejna cyfra W mod 2, W W div 2
krok 2: jeśli W > 0, wróć do kroku 1
krok 3: Wyprowadz otrzymane cyfry w kolejności odwrotnej do ich otrzymania
krok 4: Koniec
Przeliczyć na system dwójkowy liczbę 582642(10).
582642 div 2 291321 i reszta 0
=
291321 div 2 145660 i reszta 1
=
145660 div 2
72830 i reszta 0
=
72830 div 2 = 36415 i reszta 0
36415 div 2 = 18207 i reszta 1
18207 div 2 = 9103 i reszta 1
9103 div 2 = 4551 i reszta 1
4551 div 2 = 2275 i reszta 1
2275 div 2 = 1137 i reszta 1
1137 div 2 = 568 i reszta 1
568 div 2 = 284 i reszta 0
284 div 2 = 142 i reszta 0
142 div 2 = 71 i reszta 0
71 div 2 = 35 i reszta 1
35 div 2 = 17 i reszta 1
17 div 2 = 8 i reszta 1
8 div 2 = 4 i reszta 0
4 div 2 = 2 i reszta 0
2 div 2 = 1 i reszta 0
1 div 2 = 0 i reszta 1 - koniec, wynik odczytujemy w kierunku z
dołu do góry
582642(10) = 10001110001111110010(2)
Program oblicza wartość liczby binarnej podanej jako ciąg cyfr. Ciekawostką jest to, iż
ciąg ten nie jest ograniczony i może zawierać dowolną (w rozsądnych granicach) ilość
cyfr binarnych. Wynik obliczany jest nie jako wartość liczbowa, lecz jako ciąg cyfr
dziesiętnych. Dzięki temu nie jesteśmy ograniczani zakresem zmiennych całkowitych.
Wartość liczby binarnej obliczamy podanym powyżej schematem Hornera.
Wstęp
Art ten jest dla tych wszystkich, którzy mają problemy ze zrozumieniem systemów liczbowych.
Dodam jeszcze od siebie, że żaden haker, programista czy "chociażby" informatyk, nie zajedzie
daleko bez niniejszej wiedzy. Powiem nawet więcej: jest to podstawa dobrego komputerowca. Bez
tego nie masz co się uczyć języków programowania. Nie jest to zwykły kurs tejże wiedzy. Nie będę
tu, bowiem stosował żadnych oznaczeń. Nie, dlatego, że mi się nie chcę, ale żeby było wam łatwiej
wszystko zrozumieć. Zastąpię je obszernymi opisami. Skoro wszystko już jest jasne, można
zaczynać.
System dziesiętny
Dla nas, ludzi naturalnym sposobem prezentacji liczb jest system dziesiętny. Oznacza to, że
wyróżniamy dziesięć cytr. Są nimi: zero, jeden, dwa, trzy, cztery, pięć, sześć, siedem, osiem oraz
dziewięć. Oznacza się je odpowiednio: 0, 1, 2, 3, 4, 5, 6, 7, 8 oraz 9. Jak widać, wliczając zero, jest
ich dziesięć. Spróbujcie uświadomić sobie, że liczenie jest tylko i wyłącznie ILOŚCI, a nie
zapisem liczb. Zapis dziesiętny powstał wieki temu, prawdopodobnie, dlatego, że mamy dziesięć
palców. Jednakże, nie będziemy teraz się zajmować historią.
Przejdzmy zatem do bardziej konkretnych rzeczy. Umiemy już policzyć do dziecięciu, wliczając
liczbę zero. Natomiast co się stanie, gdy będziemy mieli do policzenia jakąś większą ilość? Otóż,
przeskakujemy automatycznie, na następną pozycję, a cyfry zwiększmy tylko na pozycji wysuniętej
najbardziej w prawo. Właśnie ta najbardziej w prawo wysunięta pozycja jest najsłabsza, a
najbardziej w lewo - najmocniejsza. Tym sposobem znowu zwiększamy cyfry, aż uzyskamy
dziewięć. Następna liczba, przesunie cyfrę, która znajduje się o jedną pozycję w lewo. Natomiast
gdy już nawet dziewiątka będzie na najbardziej w lewo wysuniętej pozycji, dodajemy nową
pozycję. Cykl zaczyna się ponownie i tak w nieskończoność. Może wydać się wam to trochę
skomplikowane, ale sobie to wyjaśnimy na przykładzie. Wezmy na przykład liczbę 274, czyli
dwieście siedemdziesiąt cztery. Na najsłabszej pozycji widnieje cyfra 4. Pozycja ta nosi nazwę
pozycji jedności, jeśli pamiętacie ze szkoły podstawowej. Mamy zatem 4 jedności. Na drugiej
pozycji jest cyfra 7. Cyfra ta znajduje się na drugiej pozycji, czyli pozycji dziesiątek. Można więc
powiedzieć, że jest tam siedem dziesiątek, inaczej mówiąc 70 jedności. Na trzeciej natomiast
pozycji jest cyfra 2. Trzecia pozycja to pozycja setek, czyli mam dwie setki. Innymi słowy, liczba
274 to dwie setki, siedem dziesiątek i 4 jedności. Można to zapisać następująco: 4*1 + 7*10 +
2*100. Po dokonaniu tegoż działania, wyjdzie 274. Czas, aby się temu działaniu przyjrzeć. Jak
widać, każdy kolejny składnik zawiera cyfrę z powyższej liczby oraz ciągle zwiększający mnożnik.
Mnożnik ten najpierw jest równy 1, potem 10, a na końcu 100. Znaczy to, że każdy następny jest
pomnożony przez 10. Można więc zapisać to jeszcze inaczej. Liczba 274 to tak jak: 4*100 + 7*101
+ 2*102. Jak widzimy, mnożnik to liczba 10 z ciągle zwiększającą się potęgą.
Ta informacja przyda się w następnych działach omawiających przeliczanie z jednego systemu na
drugi. Zwróćmy uwagę teraz na rzecz, która chociaż trochę uzmysłowi wam, jak działa system
dziesiętny. Gdybyśmy chcieli zwiększyć o 1 liczbę 347, to zawsze, automatycznie zwiększmy cyfrę,
która znajduję się na pozycji wysuniętej najdalej w prawo. Powstanie zatem 348. Natomiast, gdy
chcemy zwiększyć o 1 liczbę 429, widzimy, że nie można już nic do 9-tki dodać, gdyż nie ma już
wyższej cyfry. Co wtedy robimy? - każdy wie. Zwiększamy o jeden wartość cyfry znajdującej się
na pozycji z lewej strony, natomiast wartość jedności zerujemy (dajemy najniższą możliwą
wartość). Powstaje zatem 430. Jezeli natomiast chcielibyśmy zwiększyć wartość o 1 liczby 999, to
widać, że : nie można zwiększyć jedności, nie można zwiększyć dziesiątek i nie można zwiększyć
setek. Dodajemy zatem następną pozycję. Powstanie więc 1000.
Mam nadzieję, że w powyższym akapicie wyjaśniłem wam jak działa ten przeklęty system
dziesiętny i możemy już przystąpić do bardziej spektakularnych operacji. Jeśli nie zrozumiałeś nic z
powyższego tekstu, wracaj do początku i zacznij jeszcze raz, gdyż nic tu po tobie. Natomiast, w
sytuacji, gdy wszystko rozumiesz - zapraszam do następnego akapitu.
System ósemkowy
Skoro powstał system dziesiętny, można wymyślać dowolne systemy liczenia (na przykład
czwórkowy itd.). Właśnie jednym z takich systemów jest system ósemkowy. Początkowo był on
trochę stosowany, obecnie jednak jego zastosowanie jest znikome. Posłuży nam on jako dobry
przykład. Jak się pewnie domyślacie, w systemie tym jest osiem cyfr. Wcale się nie mylicie. Są to:
0, 1, 2, 3, 4, 5, 6 oraz 7. Jest ich, więc 8, stąd nazwa. Działa on na tej samej zasadzie, co system
dziesiętny. To znaczy, że gdy już jakaś cyfra jest na maksymalnej wartości, zwiększamy cyfrę na
następnej pozycji. Wyjaśni to się na przykładzie. Przekształcajmy kolejne liczby i zobaczmy, jakie
są różnice. Liczba zero (0) tak samo wygląda w obu systemach. Tak samo ma się sytuacja z jedynką
(1), dwójką (2), trójką (3) itd. Sytuacja staje się skomplikowana, gdy dojedziemy do siódemki (7).
Liczba 7 wygląda tak samo w obu systemach. Jednak nadchodzi następna liczba, zwana przez nas
jako osiem. System ósemkowy nie zna takiej cyfry, więc powstaje następna pozycja. Zatem liczba
osiem (8) w systemie dziesiętnym to liczba dziesięć (10) w systemie ósemkowym. Była to bardzo
ważna konwersja i dobrze by było, gdybyś ją zrozumiał. Liczby takie jak: 6, 7, 8, 9, 10, w systemie
ósemkowym będą wyglądać odpowiednio: 6, 7, 10, 11, 12.
Gdybyśmy chcieli sprawdzić, czy rzeczywiście liczba na przykład 14 w systemie ósemkowym to
12 w dziesiętnym, musimy przeprowadzić konwersję. Dokonuje tego tak, jak robiliśmy to w
akapicie o systemie dziesiętnym, z tym, że podstawą mnożenia będzie liczba 8. Zatem, rozpisujemy
liczbę 14 (s. ósemkowy) w następujący sposób. Jest to 4*1 + 1*8, czyli 4+8 czyli 12. Innymi słowy,
jest to 4*80 + 1*81. Po policzeniu wyniku muszą się zgadzać.
Zauważcie, że w systemie dziesiętnym kolejne pozycje miały wartości: 1, 10, 100, 1000, 100000,
1000000 itd., ponieważ podstawą była liczba 10. W systemie ósemkowym podstawą jest liczba 8, a
kolejne pozycje wyglądają następująco: 1, 8, 64, 512, 4096, 32768 itd.
System dwójkowy czyli binarny
Powiedzieliśmy sobie, że można wymyślać dowolny system zapisu liczb. Skoro tak, to, czemu
miałby nie powstać system dwójkowy, składający się tylko z dwóch cyfr: 0 (zero) i 1 (jeden).
Działa on analogicznie tak samo jak poprzednie systemy. Wyjaśni się zaraz wszystko na
konkretnym przykładzie. Wezmy na przykład kilka pierwszych liczb naszego systemu dziesiętnego.
Będziemy je konwertować na system dwójkowy, zwany również binarnym. Pierwsza liczba w
naszym systemie to 0 (zero). W systemie dwójkowym, liczba ta również jest równa 0, gdyż istnieje
tam taka cyfra. Kolejna liczba to 1 (jeden). W systemie dwójkowym, również taka cyfra istnieje,
więc zapisujemy 1. Kolejna liczba to 2 (dwa). Wiemy, że nie istnieje tam taka cyfra, więc dodajemy
kolejną pozycję, a pozycję wysuniętą na prawo, zerujemy. Zatem liczba 2 w systemie dziesiętnym
ma postać "10" w systemie dwójkowym. Bynajmniej nie jest to "dziesięć" tylko "jeden, zero".
Kolejne liczby w systemie dziesiętnym to: 3, 4, 5, 6, 7, 8, 9 itd. W systemie dwójkowym wyglądają
one odpowiednio: 11, 100, 101, 110, 111, 1000, 1001. Jak widzimy, zasada jest cały czas taka sama.
Zanim zaczniemy uczyć się, jak w prosty sposób zamienić liczbę z jednego systemu na drugi,
postawmy sobie pytanie: Po co komputerowi taki system?
No więc, jak zapewne wszyscy wiedzą, komputer składa się z części elektronicznych. Wymiana
informacji polega na odpowiednim przesyłaniem sygnałów. Podstawą elektroniki jest prąd
elektryczny, który w układach elektronicznych albo płynie albo nie. Zatem, aby łatwiej było
komputerowi rozpoznawać sygnały, interpretuje on płynący prąd jako "1" (jeden), a jego brak jako
"0" (zero). Nie trudno się domyślić, że komputer operując odpowiednim ustawieniem, kiedy ma
płynąc prąd, a kiedy nie ustawia różne wartości zer i jedynek. Procesor konwertuje je na liczby i w
ten sposób powstają czytelne dla nas obrazy, teksty, dzwięk itd. Mam nadzieję, że w ten "chłopski"
sposób wyjaśniłem wam mniej więcej jak to się odbywa. Nie tylko w postaci sygnałów
elektrycznych reprezentowane mogą być zera lub jedynki. Również na wszelkich nośnikach, np.
płyta CD, na której nagrywarka wypala malutkie wgłębienia. Właśnie te wgłębienia są jedynkami, a
"równiny" zerami (albo i odwrotnie).
Zatem podsumujmy: komputer zna tylko zera i jedynki. Bity przyjmują tylko jedną z tych dwóch
wartości. Osiem bitów to jeden bajt. Ustawienie ośmiu bitów decyduje o numerze, który może
przyjąć maksymalnie 256. Numer decyduje o znaku, jaki komputer ma wykorzystać.
Konwersja liczby dwójkowej (binarnej) na dziesiętną
Skoro już wiesz, po co nam system binarny, dowiesz się jak przeliczać go na nasz system
dziesiętny. Otóż nie jest to zbyt skomplikowane. Przypomnijcie sobie sposób z liczbami w systemie
ósemkowym. Tu oczywiście robimy to analogicznie tak samo, z tym, że podstawą jest naturalnie
liczba 2. Wezmy sobie zatem jakąś liczbę zapisaną w systemie dwójkowym, np. 1000011. Jak już
wcześniej mówiliśmy, zaczynamy od cyfr najsłabszych, czyli wysuniętych najbardziej na prawo.
Najbardziej na prawo wysunięta jest cyfra 1, a więc tak jak poprzednio mnożymy ją przez podstawę
systemu z odpowiednią potęgą. Podstawą systemu jest 2. Zatem, cała konwersja ma postać: 1*20 +
1*21 + 0*22 + 0*23 +0*24 + 0*25 +1*26, a to się równa: 1 + 2 + 0 + 0 + 0 + 0 + 64, czyli jest to 67
w systemie dziesiętnym. Moje gratulację - udało się skonwertować liczbę w zapisie dwójkowym na
zapis dziesiętny. Teraz dobrze by było gdybyś przeanalizował sobie dokładnie powyższą konwersję.
Jeżeli jej nie rozumiesz - przeczytaj jeszcze raz. Jeżeli rozumiesz - zapraszam dalej.
Konwersja liczby dziesiętnej na dwójkową (binarną)
Teraz, skoro już umiesz konwertować liczby z zapisu dwójkowego na dziesiętny warto by było
skonwertować je odwrotnie, to znaczy z zapisu dziesiętnego na dwójkowy. Gdybyśmy liczyli na
piechotę, byśmy musieli sprawdzać kolejne wielokrotności liczby 2. Sposób ten raczej jest mało
stosowany, zajmijmy się trochę lepszym. Jest to prosty sposób, wcale nie wymaga myślenia.
Najpierw bierzemy liczbę, jaką chcemy skonwertować na zapis dwójkowy. Wezmy liczbę z
poprzedniego rozdziału i sprawdzmy, czy nam się to zgadza. Zatem, liczba którą będziemy
konwertować to 67. Sposób jest następujący: liczbę dzielimy przez 2 i jeżeli wynik będzie z resztą:
zapisujemy 1, jeżeli nie - zapisujemy 0. Następnie znowu dzielimy przez 2 to co zostało z liczby,
ale bez reszty. Taki proces trwa, aż zostanie 0 (zero). Otrzymane zera i jedynki zapisujemy w
odwrotnej kolejności. Wyjaśni się to wszystko na konkretnym przykładzie. Zatem do dzieła:
67 :2 | 1
33 :2 | 1
16 :2 | 0
8 :2 | 0
4 :2 | 0
2 :2 | 0
1 :2 | 1
Co daje 1000011. Jak widzimy, wynik zgadza się. Widać również, że zawsze na samym końcu po
podzieleniu będzie 0, zatem ostatnia liczba jest równa 1. Jeden podzielić na dwa zawsze wyjdzie 0,5
zatem wynik z resztą. Co za tym idzie - pierwsza cyfra w zapisie dwójkowym jest ZAWSZE
RÓWNA 1. Nie tylko matematycznie można to udowodnić. W elektronice, również musi być taka
postać rzeczy. Przyjęliśmy bowiem, że dla komputera brak przepływu prądu oznacza "0", natomiast
przepływ prądu - "1". Sygnał zatem nie może zaczynać się od "0", gdyż jest to brak sygnału.
Procesor nie wie, czy sygnał już się zaczął, czy jeszcze nie. Początek musi być "1" (jest sygnał).
System szesnastkowy czyli heksadecymalny
Póki co znasz już 3 systemy liczbowe: dziesiętny, ósemkowy i dwójkowy. Wszystkie one działają
analogicznie tak samo, zmienia się tylko podstawa, czyli ilość cyfr. Teraz zajmiemy się nieco
systemem szesnastkowym inaczej zwanym heksadecymalnym. Jest on dość szeroko stosowany w
dzisiejszej informatyce, zatem należało by go rozumieć. Jak się zapewne domyślasz, podstawą tego
systemu jest 16. Musi istnieć więc szesnaście cyfr. Pierwsze dziesięć już znasz. Są nimi
odpowiednio: 0, 1, 2, 3, 4, 5, 6, 7, 8 oraz 9. W naszym systemie, kolejnÄ… liczbÄ… jest 10, natomiast w
systemie szesnastkowym jest ono reprezentowane przez A. Kolejne liczby to: 11 - B, 12 - C, 13 - D,
14 - E, 15 - F. Zatem, np. liczby w systemie dziesiętnym: 2, 6, 9, 11, 14, w systemie szesnastkowym
wyglądają odpowiednio: 2, 6, 9, B, E. Widać od razu, że duże liczby zajmują w systemie
szesnastkowym mało miejsca. Dlatego właśnie jest on tak przydatny.
Konwersja liczby szesnastkowej na dziesiętną
Konwersja ta odbywa się podobnie jak w przypadku liczb binarnych, z tym, że podstawą jest nie
2 a 16. Wezmy dowolnie wymyśloną liczbę w zapisie szesnastkowym, na przykład AB12 (co
czytamy: a b jeden dwa). Bierzemy cyfrę wysuniętą najbardziej w prawo i postępujemy tak samo
jak w przypadku liczb dwójkowych, ale zamiast mnożnika 2 mamy 16. Zatem jest to: 2*160 +
1*161 + 11*162 + 10*163 , a więc jest to 2 + 16 + 2816 + 40960, a więc jest to liczba 43794 w
zapisie dziesiętnym.
Konwersja liczby dziesiętnej na szesnastkowy
No to warto by było teraz z powrotem odwrócić liczbę 43794 w zapisie dziesiętnym na AB12 w
szesnastkowym. Jeżeli wiemy jak to się robi - nie ma problemu. Zatem zaczynajmy.
Najpierw musimy sobie napisać jakie są kolejne wielokrotności liczby 16. A są to: 1, 16, 256,
4096, 65536 itd. Jak widać nasza liczba w systemie dziesiętnym, czyli 43794 jest między liczbą
4096, a 65536. Bierzemy pod uwagÄ™ liczbÄ™ mniejszÄ… od naszej, czyli 4096. Jest ona czwartÄ…
wielokrotnością, więc nasza liczba w systemie szesnastkowym będzie miała 4 cyfry (na razie
wszystko się zgadza). Teraz sprawdzam, ile razy liczba 4096 mieści się w naszej liczbie
konwertowanej, czyli 43794. Okazuje się, że mieści się 10 razy. 10 w systemie szesnastkowym to
A, zatem pierwsza cyfra to A. Jak widać, w dalszym ciągu wszystko się zgadza. Teraz, skoro liczba
4096 zmieściła się dziesięć razy w 43794, to jeszcze zapewne została jakaś reszta. Obliczamy sobie
tą resztę. Mnożymy zatem 4096*10 co daje 40960. Teraz odejmujemy wynik od naszej liczby i
obliczamy resztę. Zatem 43794 - 40960 = 2834. To jest nasza reszta. Następnie z resztą
postępujemy tak samo, jak na początku konwersji. Już na oko widać, że w następnym kroku
sprawdzamy ile razy 256 mieści się w 2834. Mieści się 11 razy, zatem kolejna cyfra szukanego
zapisu to B. Następnie znowu: obliczamy resztę, itd. Końcowy wynik powinien wynosić AB12. Tak
oto skonwertowaliśmy liczbę z zapisu dziesiętnego na szesnastkowy.
Konwersja liczby dwójkowej na szesnastkowy
I wydawać siÄ™ może, że wkraczamy w coraz to bardziej zaawansowane progi żÿ ale od razu
mówię, że nie. Konwersja ta jest bardzo prosta i wcale nie wymaga skomplikowanych obliczeń.
Najpierw zróbmy małą sztuczkę. Zobaczcie, jaka jest maksymalna liczba w zapisie dwójkowym
składająca się z 4 bitów. Jeżeli liczba ma być maksymalna, wszystkie jej cyfry muszą mieć
maksymalne wartości. Ma ona zatem postać: 1111. Po przeliczeniu, otrzymamy 15 w zapisie
dziesiętnym. Jak pewnie zauważyliście, 15 jest to maksymalna cyfra w zapisie szesnastkowym,
czyli F. Daje to trochę do myślenia, ale najważniejszy jest jeden fakt: każda liczba składająca się z
czterech cyfr w zapisie dwójkowym da się zapisać jako jedna cyfra w zapisie szesnastkowym.
Może to zabrzmiało groznie, ale niedługo powinno się wytłumaczyć. Zatem, kolejne liczby w
zapisie dwójkowym i szesnastkowym to:
Zapis dwójkowy: Zapis szesnastkowy:
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
Wezmy dla przykładu wcześniej już wspomnianą liczbę 67 w systemie dziesiętnym.
Przekształciliśmy ją na 1000011 w zapisie dwójkowym. Jak teraz z tego otrzymać zapis
szesnastkowy? Otóż bardzo prosto. Dzielimy kod binarny na czterocyfrowe grupy od prawej strony
zaczynając. Jeżeli z lewej strony nie będzie czterech cyfr - dopisujemy z przodu zera. Zatem,
otrzymamy dwie grupy. Są to: 0100 oraz 0011. Teraz wystarczy zamienić je na odpowiednie cyfry z
zapisu szesnastkowego (można się posłużyć powyższą tabelą). W efekcie otrzymamy: 43 w zapisie
szesnastkowym. Warto by było jeszcze sprawdzić czy wynik się zgadza konwertując zapis
szesnastkowy na dziesiętny. Zatem jest to: 3*160 + 4*161, czyli 3 + 64, czyli 67 w zapisie
dziesiętnym. Jak widzimy, wszystko się zgadza.
Konwersja liczby szesnastkowej na dwójkową
A wykonuje ją się odwrotnie jak dwójkową na szesnastkową. Po prostu kolejne cyfry w zapisie
szesnastkowym zapisujesz jako cztery cyfry w zapisie dwójkowym. Pamiętaj, że każda cyfra w
zapisie szesnastkowym odpowiada jako 4 cyfry w zapisie dwójkowym (nie więcej i nie mniej).
Ewentualnie możesz pozbyć się zer znajdujących się na najbardziej w lewo wysuniętej pozycji, aż
znajdziesz tam jedynkę, gdyż mówiliśmy o tym, że kod binarny zawsze zaczyna się od 1 (np. jeśli
wyjdzie 0001100101110 to możesz to zapisać jako 1100101110 pozbywając się zer z początku).
Podsumowanie
I doszliśmy wreszcie do końca tegoż artykułu. Jeżeli wszystko dokładnie przeczytałeś i nie bardzo
tego wszystkiego rozumiesz - masz dwa wyjścia. Albo przeczytasz wszystko jeszcze raz i może coś
więcej zrozumiesz, albo ewentualnie jak już nic nie pojmujesz - wyślij mi maila z zapytaniem
interesującego cię tematu z niniejszego artykułu. Mój adres e-mail znajduje się na końcu artykułu
przy podpisie i tam właśnie odprawiam nie rozumiejących. Ale najpierw, zanim do mnie napiszesz -
kliknij tutaj i przeczytaj artykuł jeszcze raz (z kartką, kalkulatorem i ołówkiem bo bez ćwiczeń ani
rusz). Zatem żegnam się z wami i do zobaczenia.
Konwersja liczby dziesiętnej na liczbę dwójkową
Metoda ilorazowa dla liczb całkowitych
Dzielenie przez 2 Iloraz Reszta Nr bitu
130:2 65 0 0
65:2 32 1 1
32:2 16 0 2
16:2 8 0 3
8:2 4 0 4
4:2 2 0 5
2:2 1 0 6
1:2 0 1 7
13010=100000102
Konwersja liczby dwójkowej na dziesiętną
Metoda definicyjna.
10000010 2= 1 x 27 + 0 x 26+0 x 25 +0 x 24 +0 x 23 +0 x 21 + 1 x 21+0 x 20=128
+2=13010
100000102=13010
W systemie binarnym, czyli dwójkowym istnieją tylko dwie cyfry (0 i 1). Liczby binarne
wyglądają więc trochę dziwnie: 0, 1, 10, 11, 100, 101, 111 itd. Radzę nazywać te kolejne liczby
dwójkowe zero, jeden, jeden-zero, jeden-jeden, jeden-zero-zero, jeden-zero-jeden itd., ponieważ np.
liczba 1010110 to nie jest jeden milion dziesięć tysięcy sto dziesięć. Dziesiętna wartość powyższej
liczby binarnej to 86.
Zamiana liczb binarnych na dziesiętne i odwrotnie podlega tym samym zasadom, które były
omówione przy liczbach szesnastkowych. W liczbach binarnych więcej problemu sprawia
policzenie pozycji, czyli numeru kolumny, niż same wartości, którymi są tylko 0 i 1. Poniższa
tabela przedstawia wartości liczb binarnych do 16 miejsc.
Liczba dwójkowa Potęga Dziesiętnie
1 = = 1
20
10 = = 2
21
100 = = 4
22
1000 = = 8
23
10000 = = 16
24
100000 = = 32
25
1000000 = = 64
26
10000000 = = 128
27
100000000 = = 256
28
1000000000 = = 512
29
10000000000 = = 1024
210
100000000000 = = 2048
211
1000000000000 = = 4096
212
10000000000000 = = 8192
213
100000000000000 = = 16384
214
1000000000000000 = = 32768
215
10000000000000000 = = 65536 itd.
216
Można pomyśleć, że przesadziłem z tą tabelą, gdyż takich dużych liczb się nie używa.
Niestety jest to błędne rozumowanie. W rzeczywistości procesory, których się obecnie używa
posługują się liczbami dwukrotnie większymi.
Po liczbach binarnych dla odróżnienia ich od dziesiętnych należy pisać skrót (bin). Nie jest to tak
bezwzględnie konieczne jak pisanie skrótu (hex) po liczbach heksadecymalnych, ponieważ liczby
binarne zazwyczaj wyróżniają się swoim wyglądem, jednakże radzę stosować to oznaczenie.
Przeliczanie liczb dwójkowych na dziesiętne.
Przekształcanie liczb binarnych na dziesiętne odbywa się w podobny sposób jak w przypadku liczb
heksadecymalnych, tylko znacznie prościej. Tutaj nie musisz obliczać wielokrotności wartości
poszczególnych kolumn. W liczbach dwójkowych wartość ta albo występuje, albo w ogóle jej nie
ma.
Dla przykładu przekształcę prostą liczbę binarną 1010111001(bin) na jej dziesiętny
odpowiednik. Zaczynam od prawej strony. Jeśli dana kolumna zawiera 1 to zapisuję wartość danej
kolumny. Jeśli występuje tam 0, to pomijam tę kolumnę.
Kolumna nr 0 (skrajna z prawej strony) zawiera cyfrę 1, zapisuję więc 1. Kolumna nr 1 zawiera
cyfrę 0, więc ją pomijam. Kolejną także pomijam. Kolumna nr 3 zawiera cyfrę 1, więc zapisuję
wartość tej kolumny, czyli 23 = 8. Dwie następne kolumny również zawierają cyfrę 1, zapisuję więc
odpowiednio: 24 = 16 i 25 = 32. Kolumnę nr 6 pomijam, gdyż zawiera ona cyfrę 0. Następna
kolumna zawiera cyfrę 1, więc zapisuję 27 = 128. Następną kolumnę pomijam. Kolumna nr 9
(pierwsza z lewej) zawiera cyfrę 1, więc zapisuję liczbę 29 = 512. Po zsumowaniu wszystkich
zapisanych liczb otrzymuję 697, co jest dziesiętnym odpowiednikiem liczby 1010111001(bin).
Przekształcanie liczb dziesiętnych na dwójkowe wykonujemy dokładnie tak samo jak w przypadku
liczb szesnastkowych. W powyższym przykładzie liczenie kolumn zacząłem od zera. Jest to swego
rodzaju ułatwienie stosowane przez programistów. Zaczyna się liczyć od bitu zerowego, czyli od
zerowej potęgi.
Skrót systemu dwójkowego.
Liczba 218 w systemie dwójkowym będzie przedstawiona jako 11011010(bin). Natomiast w
systemie szesnastkowym liczba ta będzie wyglądać następująco: DA(hex). Dwie cyfry
heksadecymalne są łatwiejsze do przeczytania czy zapamiętania. Tak więc skrótem systemu
binarnego jest właśnie system heksadecymalny.
A(hex) odpowiada 10 dziesiętnie. Po przekształceniu 10 na liczbę binarną otrzymamy 1010(bin).
Przyjrzyjmy siÄ™ jeszcze raz binarnemu odpowiednikowi 218: 11011010(bin). Cztery ostatnie cyfry
to: 1010. Jest to właśnie dwójkowy odpowiednik A(hex). Natomiast pierwsze cztery cyfry, czyli
górna połowa liczby, równa jest D(hex), co proponuję sprawdzić samemu. Tak więc dwójkowym
odpowiednikiem 218 jest:
218 dziesiętnie
1101 1010 dwójkowo
D A szesnastkowo
Każdą liczbę dwójkową można przekształcić na liczbę heksadecymalną, która jest krótsza w
zapisie. W tym celu należy przekształcać grupy czterech cyfr (grupy te muszą być tworzone od
prawego brzegu). Zrobię to na przykładzie zwykłej dwójkowej liczby 32-cyfrowej:
11110000000000001111101001101110
ZacznÄ™ od podzielenia jej na grupy 4-cyfrowe:
1111 0000 0000 0000 1111 1010 0110 1110
Każdą z tych grup zamienię na pojedynczą cyfrę szesnastkową:
1111 0000 0000 0000 1111 1010 0110 1110
F 0 0 0 F A 6 E
czyli odpowiednikiem tego binarnego węża jest F000FA6E(hex).
Wyszukiwarka
Podobne podstrony:
F1 81 Zapis liczb ze znakiemZamiana liczb z systemu dziesiętnego na dwójkowy i odwrotnieandmp wyliczanki wprowadzajace dziecko w swiat liczbprzymiotniki w jzyku woskim odmienne ze wzgldu na rodzaj i liczbBiblia w kulturze Zapis czatu z ks prof Tomaszem Jelonkiem5 teoria liczbwięcej podobnych podstron