« poprzedni punkt  następny punkt »


2. Dodawanie i odejmowanie liczb

Jak z powyższego opisu wynika, ważną rzeczą dla reprezentacji liczb jest przyjęcie odpowiedniej liczby bitów. Tutaj założymy, że posługiwać się będziemy liczbami ośmiobitowymi.

Dodawanie liczb dodatnich w systemach ZM, U1i U2 poznaliśmy w jednym z poprzednich wykładów. Układem realizującym dodawanie jest sumator. Inaczej trzeba dodawać liczby dodatnie w kodzie polaryzowanym. Weźmy dwie liczby +2310 i +2610. Dodając ich reprezentacje dwójkowe otrzymamy:

   10010111
+  10011010
   100110001

Po zwykłym sumowaniu otrzymany wynik jest nieprawidłowy. Należy zauważyć, że dodając dwie liczby dodatnie w kodzie polaryzowanym, na najbardziej znaczącej pozycji zawsze wystąpi przeniesienie (w obu liczbach na najbardziej znaczącej pozycji są jedynki). Dlatego po wykonaniu dodawania trzeba odjąć wartość polaryzacji:

   100110001
 -  10000000
     10110001

Teraz wynik w kodzie polaryzowanym odpowiada liczbie dziesiętnej +49 (32+16+1= 49) więc jest prawidłowy.

Operacja odejmowania w podanych zapisach liczbowych zostanie pokazana jako dodawanie dwóch liczb z przeciwnymi znakami. Jako przykładowe liczby weźmiemy +2310 i -2610.

Odejmowanie dwóch liczb w kodzie ZM

Algorytm postępowania jest następujący:

Przykład

Liczba (23)10 = (00010111) ZM Liczba (-26)10 = (10011010) ZM

Reguły odejmowania dwójkowego są następujące:

Odejmując moduły przykładowych liczb według powyższych reguł otrzymamy:

   0011010
-  0010111
    0000011

Na trzeciej pozycji od prawej strony została wzięta pożyczka z czwartej pozycji.

Odejmowanie dwóch liczb w kodzie U1

Algorytm postępowania jest następujący:

Przykład

Liczba (23)10 = (00010111) U1   Liczba (-26)10 = (11100101) U1

Przeprowadźmy dodawanie liczb dwójkowych jak w kodzie NKB.

 00010111
 11100101
  11111100

Otrzymany jest poprawny, gdyż odpowiada on liczbie (-3)10.

Przykład

Dodajmy teraz dwie inne liczby, np. +31 i -26.

Liczba (+31)10 = (00011111) U1    Liczba (-26)10 = (11100101) U1.

   00011111
   11100101
(1) 00000100

W wyniku dodawania powstało ośmiobitowe słowo i dziewiąty bit przeniesienia (w nawiasie). Otrzymany wynik jest nieprawidłowy, gdyż jest to liczba dziesiętna +4. Ponieważ podczas dodawania, na najbardziej znaczącej pozycji, powstało przeniesienie, to do najmniej znaczącej pozycji otrzymanego wyniku należy je dodać.

00000100
       1
 00000101

Teraz wynik jest prawidłowy.

Odejmowanie dwóch liczb w kodzie U2

Algorytm postępowania jest następujący:

Przykład

Liczba (23)10 = (0010111) U2   Liczba (-26)10 = (11100110) U2

Przeprowadźmy sumowanie liczb dwójkowych jak w kodzie NKB.

00010111
11100110
 11111101

Otrzymany wynik jest prawidłowy, gdyż odpowiada liczbie -310. Dla tego kodu otrzymuje się poprawny wynik po zwykłym sumowaniu liczb. Jest to ważna zaleta tego kodu.

Odejmowanie dwóch liczb w kodzie polaryzowanym

Algorytm postępowania jest następujący:

Przykład

Liczba (23)10 = (10010111) BIAS   Liczba (-26)10 = (01100110) BIAS

Przeprowadźmy sumowanie liczb dwójkowych jak w kodzie NKB.

10010111
01100110
 11111101

Otrzymany wynik jest nieprawidłowy. Zgodnie z algorytmem należy wykonać krok korekcyjny, czyli odjęcie od wyniku wartości polaryzacji:

  11111101
- 10000000
   01111101

Teraz otrzymany wynik jest prawidłowy i wynosi -310.

Na koniec tych rozważań wykonajmy operację dodawania dwóch liczbach ujemnych. Jako przykładowe weźmy liczby (-23)10 i (-26)10.

W kodzie ZM mamy, że (-23)10 = (10010111) ZM i (-26)10 = (10011010) ZM.

Dodając moduły tych liczb otrzymamy:

0010111
0011010
 0110001

Uzupełniając wynik o bit znaku (w tym przypadku 1) otrzymamy prawidłowy wynik:

(10110001) ZM = (-49) 10

W kodzie U1 mamy, że (-23)10 = (11101000) U1 i (-26)10 = (11100101) U1

Dodając liczby otrzymamy:

    11101000
    11100101
(1)  11001101

Wykonując krok korekcyjny otrzymamy:

11001101
       1
 11001110

Otrzymany wynik jest poprawny, gdyż jest to liczba -4910.

W kodzie U2 mamy, że (-23)10 = (11101001) U2 i (-26)10 = (11100110) U2

Dodając liczby otrzymamy:

         11101001
         11100110
(1)       11001111

Otrzymany wynik jest poprawny gdyż jest to liczba -4910.

W kodzie polaryzowanym mamy, że (-23)10 = (01101001) BIAS i (-26)10 = (01100110)BIAS.

Dodając liczby otrzymamy:

01101001
01100110
 11001111

Odejmując polaryzację otrzymamy, że

  11001111
- 10000000
   01001111

Otrzymany wynik jest poprawny gdyż jest to liczba -4910

Z powyższych rozważań wynika, że najprościej wykonuje się działania w zapisie U2. Dlatego najpowszechniej ten sposób reprezentacji liczb jest wykorzystywany w komputerach. Ponadto należy zwrócić uwagę na to, że podczas wykonywania przedstawionych działań wynik może okazać się nieprawidłowy ponieważ przekroczy zakres na przyjętej długości słowa. W takim przypadku układy realizujące operacje winny ten fakt sygnalizować.


« poprzedni punkt  następny punkt »