« poprzedni punkt | następny punkt » |
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 » |