System binarny
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 |
= |
20 |
= |
1 |
10 |
= |
21 |
= |
2 |
100 |
= |
22 |
= |
4 |
1000 |
= |
23 |
= |
8 |
10000 |
= |
24 |
= |
16 |
100000 |
= |
25 |
= |
32 |
1000000 |
= |
26 |
= |
64 |
10000000 |
= |
27 |
= |
128 |
100000000 |
= |
28 |
= |
256 |
1000000000 |
= |
29 |
= |
512 |
10000000000 |
= |
210 |
= |
1024 |
100000000000 |
= |
211 |
= |
2048 |
1000000000000 |
= |
212 |
= |
4096 |
10000000000000 |
= |
213 |
= |
8192 |
100000000000000 |
= |
214 |
= |
16384 |
1000000000000000 |
= |
215 |
= |
32768 |
10000000000000000 |
= |
216 |
= |
65536 itd. |
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
Komputery pracują, używając jedynie dwóch liczb: 0 i 1.
Komputer przetwarza liczby i obrazy w kody składające się z zer i jedynek. Operując tymi kodami, wykonuje obliczenia.
Taki kod, który składa się zer i jedynek nazywamy kodem dwójkowym lub binarnym. Wszystkie dane i instrukcje dostarczane są do komputera w postaci liczb dziesiętnych, liter, symboli i znaków. Wszystkim im jest przypisany kod binarny, który generowany jest przez urządzenie wejściowe to znaczy takie przez które wprowadzamy dane. Najczęściej jest to klawiatura, może też nim być skaner czy aparat cyfrowy. Sygnał kodowy nie jest jednak ciągiem liczb, lecz impulsów elektrycznych.
Impuls odpowiada 1, jego brak natomiast rejestrowany jest jako 0. Kody przechowywane są w pamięci komputera w postaci sekwencji włączenia i wyłączenia potencjałów elektrycznych lub magnetyzmu.
Główny procesor przetwarza sekwencje impulsów elektrycznych, tworząc liczbę binarną, dekoduje ją i przekazuje wynik.
Ilość przetworzonych impulsów przez procesor w ciągu sekundy nazywamy taktowaniem i podaje się je w MHz (Mega Hertzach).
System dziesiętny |
System binarny |
0 |
0000 |
1 |
0001 |
2 |
0010 |
3 |
0011 |
4 |
0100 |
5 |
0101 |
6 |
0110 |
7 |
0111 |
8 |
1000 |
9 |
1001 |
Przykładowa tabela wartości liczb w różnych systemach
Binarnie |
|||
0000 |
00 |
0 |
0x00 |
0001 |
01 |
1 |
0x01 |
0010 |
02 |
2 |
0x02 |
0011 |
03 |
3 |
0x03 |
0100 |
04 |
4 |
0x04 |
0101 |
05 |
5 |
0x05 |
0110 |
06 |
6 |
0x06 |
0111 |
07 |
7 |
0x07 |
1000 |
010 |
8 |
0x08 |
1001 |
011 |
9 |
0x09 |
1010 |
012 |
10 |
0x0A |
1011 |
013 |
11 |
0x0B |
1100 |
014 |
12 |
0x0C |
1101 |
015 |
13 |
0x0D |
1110 |
016 |
14 |
0x0E |
1111 |
017 |
15 |
0x0F |
10000 |
020 |
16 |
0x10 |
... |
... |
... |
... |