Naturalny system dwójkowy


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.

Zapamiętaj:

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



Przykład:

Obliczyć wartość liczby dwójkowej 11100101(2).

 

11100101(2) = 1 × 27 + 1 × 26 + 1 × 25 + 0 × 24 + 0 × 23 + 1 × 22 + 0 × 21 + 1 × 20
11100101(2) = 1 × 128 + 1 × 64 + 1 × 32 + 0 × 16 + 0 × 8 + 1 × 4 + 0 × 2 + 1 × 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.

 

Przykład:

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


Zakres liczby dwójkowej

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:


dla 1b mamy
dla 2b mamy
dla 3b mamy
dla 4b mamy
...
1
3
7
15

Liczby te tworzą prosty ciąg potęgowy:


dla 1b mamy  = 21 - 1
dla 2b mamy = 22 - 1
dla 3b mamy = 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:


Zapamiętaj:

Zakres n bitowej liczby w naturalnym kodzie dwójkowym wynosi

Z(2) = 0 ... 2n - 1



Przykład:

Jaką największą liczbę dziesiętną można przedstawić przy pomocy 64 bitów?

Odp.

264 - 1 = 18446744073709551616 - 1 = 18446744073709551615


Schemat Hornera dla liczb dwójkowych

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

 

K01: W pierwsza cyfra
K02: Dopóki są kolejne cyfry, wykonuj W ← 2 × W + kolejna cyfra
K03: Zakończ

 

Operację mnożenia 2 × W możemy zastąpić dodawaniem W + W. Dodawanie komputer wykonuje o wiele szybciej od mnożenia (jeszcze szybszą operacją jest przesunięcie bitów o jedną pozycję w lewo - taką operację wykonuje pojedynczy rozkaz procesora i jest ona szybsza od dodawania!)..

 

Przykład:

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

 

Przeliczanie liczb dziesiętnych na dwójkowe

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

 

K01: kolejna cyfra ← W mod 2, W ← W div 2
K02: Jeśli W > 0, to idź do K01
K03: Wyprowadź otrzymane cyfry w kolejności odwrotnej do ich otrzymania
K04: Zakończ

 

Przykład:

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)

 

Tutaj możesz przetestować działanie prezentowanego skryptu:

Obliczanie wartości dziesiętnej
dowolnej liczby binarnej


Wprowadź poniżej liczbę binarną

...


Zadanie 1 (łatwe)

Oblicz wartość następujących liczb binarnych:
1100000011(2) =   

.

111000111(2) =   

.

10101010101(2) =   

.

11110000(2) =   

.

11001100110011(2) =   

.

 

Zadanie 2 (łatwe)

Przelicz na system dwójkowy podane poniżej liczby dziesiętne:
10(10) = (2)  

.

 100(10) = (2)  

.

1000(10) = (2)  

.

10000(10) = (2)  

.

93673(10) = (2)  

.

 

Zadanie 3 (dosyć łatwe)

Ile razy wzrośnie zakres n-bitowych liczb binarnych, gdy liczbę bitów zwiększymy o 1, 2, 3, 4, m bitów? Odpowiedź uzasadnij.

Zadanie 4 (łatwe)

Obliczyć wartość dziesiętną następujących liczb dwójkowych:
11,101(2) = (10)  

.

101,1101(2) = (10)  

.

1101011,11001(2) = (10)  

.


Zadanie 5 (łatwe)

Przeliczyć podane liczby dziesiętne na zapis dwójkowy:
7,6875(10) = (2)  

.

15,84375(10) = (2)  

.

27,8359375(10) = (2)  

.


Zadanie 6 (dosyć łatwe)

Wyznaczyć 100 cyfr ułamkowych dwójkowego rozwinięcia liczby dziesiętnej 0,8(10).

 

Zadanie 7 (dosyć łatwe)

Wyznacz błąd względny i bezwzględny rozwinięcia dwójkowego liczby dziesiętnej 0,2(10) o dokładności 10 binarnych cyfr ułamkowych.




Wróć do spisu tematów