a) Naturalny kod binarny (NKB)

* Kilka słów wstępu *

Przed  rozpoczęciem napisania swojego pierwszego programu warto znać chociażby takie podstawy jak systemy liczbowe. Program napisany w języku programowania wysokiego poziomu jest zrozumiały dla programisty, ale nie dla komputera. Dlatego też kompilator zamienia napisane przez nas programy na kod binarny, który jest zrozumiały dla komputera.

Do najważniejszych systemów liczbowych poza dziesiętnym należą więc:
  • kod binarny (inaczej: dwójkowy, zero-jedynkowy), 
  • kod uzupełnień do dwóch (U2), 
  • kod heksadecymalny (szesnastkowy), 
  • kod ZM (znak-moduł) oraz 
  • kod ósemkowy (OCT).
Systemy te różnią się między sobą sposobami zapisu, zakresami obsługiwanych wartości, zastosowaniem, podstawą systemu oraz kilkoma innymi rzeczami.


* Naturalny Kod Binarny (NKB) *

System liczbowy NKB umożliwia zapis liczb całkowitych w kodzie dwójkowym (binarnym). Podstawa tego systemu wynosi 2. Do zapisu liczb wykorzystuje się jedynie dwie cyfry: 0 i 1. Dzięki temu cyfry dwójkowe mogą być bezpośrednio przedstawiane przy pomocy bitów, które również przyjmują dwa stany 0 i 1.

Liczby binarne zapisujemy najczęściej z określoną liczbą bitów (np. 4 lub 8), a podyktowane jest to sprzętowo, gdyż w jednej komórce pamięci zapamiętywane jest 8 bitów.

* MSB, LSB - najbardziej znaczący bit, najmniej znaczący bit *

Kolejne bity liczby zapisanej dwójkowo numeruje się rosnąco od prawej do lewej strony. Bit o indeksie 0  czyli pierwsza cyfra z prawej strony nazywana jest najmniej znaczącym bitem (ang. LSB - Least Significant Bit), gdyż w najmniejszym stopniu wpływa na wynik całej liczby. Bit znajdujący się skrajnie z lewej strony to najbardziej znaczący bit (ang. MSB - most significant bit).
Struktura liczby zapisanej w kodzie NKB
* Dziesiętna reprezentacja liczby NKB *

W celu obliczenia wartości dziesiętnej liczby zapisanej w kodzie NKB należy zsumować ze sobą wartości tylko tych pozycji na których stoi bit o wartości 1.

Oto kilka przykładowych liczb zapisanych w kodzie binarnym:

a) 10011011
b) 11111111
c) 00000000

Ich reprezentację dziesiętną obliczyć można następująco:

a) 10011011 = 1 x 2^0 + 1 x 2^1 + 0 * 2^2 + 1 * 2^3 + 1 * 2^4 + 0 * 2^5 + 0 * 2^6 + 1 * 2^7 = 155
b) 11111111 = 1 x 2^0 + 1 x 2^1 + 1 * 2^2 + 1 * 2^3 + 1 * 2^4 + 1 * 2^5 + 1 * 2^6 + 1 * 2^7 = 255
c) 00000000 = 0 x 2^0 + 0 x 2^1 + 0 * 2^2 + 0 * 2^3 + 0 * 2^4 + 0 * 2^5 + 0 * 2^6 + 0 * 2^7 = 0

* Binarna reprezentacja liczby dziesiętnej *

Operacja zamiany w drugą stronę tj. liczby dziesiętnej na binarną polega na uwzględnieniu kolejnych reszt z dzielenia modulo. Rozważmy więc zamianę jednej z wyżej podanych liczb dziesiętnych na liczbę binarną (np. 155).

155 : 2 = 77 reszty 1 -> LSB
77 : 2 = 38 reszty 1
38 : 2 = 19 reszty 0
19 : 2 = 9 reszty 1
9 : 2 = 4 reszty 1
4 : 2 = 2 reszty 0
2 : 2 = 1 reszty 0
1 : 2 = 0 reszty 1  -> MSB

Otrzymany wynik zapisujemy od dołu do góry.

Operacje arytmetyczne na liczbach zapisanych w kodzie dwójkowym (binarnym)

Operacje arytmetyczne wykonuje się bardzo podobnie do tradycyjnych operacji dodawania/odejmowanie, mnożenia czy dzielenia "pod kreskę". Pewnym niuansem jest tutaj tzw. zjawisko nadmiaru i występuje wtedy kiedy próbujemy dodać jedną liczbę do drugiej, przy czym jej wynik nie mieści się w zakresie wartości. Jak widać wyżej liczba zapisana na ośmiu bitach może mieć maksymalną wartość 255 (11111111), a minimalną wartość 0 (00000000), tak więc może przechowywać 256 wartości z zakresu <0; 255>.

* Dodawanie w NKB *
Co więc stanie się kiedy spróbujemy dodać do liczby 255 jakąś wartość? Wystąpi wcześniej wspomniane zjawisko nadmiaru. Polega ono na tym, że najstarszy bit wyniku zostaje utracony, skutkiem czego otrzymany wynik nie będzie prawidłowym wynikiem sumowania tych dwóch liczb. Zobrazujmy więc taki przypadek sumując liczby 255 i 10 zapisane w kodzie binarnym (czerwonym kolorem oznaczono bit utracony):


Jak widać wynik działania nie jest poprawny. Skąd zatem wzięła się liczba 9, kiedy wynik powinien wynosić 265? Ano stąd, że na ośmiu bitach nie jesteśmy w stanie zmieścić liczby większej niż 255. Dodając każdą kolejną liczbę zakres zeruje się i do tego stanu dodawana jest liczba, zatem:
255 + 1 = 0
255 + 2 = 1
255 + 3 = 2
255 + 4 = 3
255 + 5 = 4
255 + 6 = 5
255 + 7 = 6
255 + 8 = 7
255 + 9 = 8
255 + 10 = 9

* Odejmowanie w NKB *
Podobnie sytuacja ma się w przypadku odejmowania. Tym razem przy próbie odjęcia liczby większej od mniejszej zakres wartości wyzeruje się i od tego stanu zostanie odjęta liczba. Jest to tzw. zjawisko niedomiaru. Zobrazujmy więc ten przypadek na liczbach z poprzedniego przykładu, z tym że od liczby 10 spróbujemy odjąć liczbę 255.









Brak komentarzy:

Prześlij komentarz