Systemy liczbowe
Strona domowa
Zarys teoretyczny
Naturalny system dwójkowy
Kod uzupełnień do dwóch
Kod znak-moduł
Standard IEEE 754
System szesnastkowy
Ćwiczenia
Naturalny system dwójkowy
Kod uzupełnień do dwóch
Kod znak-moduł
Standard IEEE 754
System szesnastkowy
TEST

"Działania arytmetyczne w kodzie uzupełnień do dwóch"

Podaj 2 liczby w kodzie uzupełnień do dwóch. Wynik zostanie przedstawiony na 8 bitach:

=

Suma i różnica:

Liczby w kodzie U2 dodajemy i odejmujemy według poznanych zasad dla naturalnego sytemu dwójkowego. Różnica polega tylko na tym, że ignorujemy przeniesienia poza bit znaku.


Przykłady:



0100010111100
+ 0010
+ 110
+ 11011
0110
1 011
1 10111
4 + 2 = 65 + (-2) = 3(-4) + (-5) = (-9)


01101011100
- 010
- 1110
- 1011
001
1 0111
0001
3 - 2 = 15 - (-2) = 7(-4) - (-5) = 1

Uwaga! Na czerwono zostały zaznaczone ignorowane bity.

Iloczyn:

W celu pomnożenia 2 liczb w kodzie U2 należy rozszerzyć znakowo obie mnożone liczby tak, aby ich długość (liczba bitów) wzrosła dwukrotnie. Jeśli liczby te są różnej długości to należy rozszerzyć znakowo względem dłuższej liczby. W praktyce rozszerzenie znakowe polega na powieleniu bitu znaku na wszystkie dodane bity. Rozszerzenie to nie powoduje zmiany wartości rozszerzanej liczby.

Wyjaśnienie:

0111(U2) = 0000 0111(U2) - rozszerzyliśmy znakowo liczbę 4 bitową do 8 bitowej
1011(U2) = 1111 1011(U2) - to samo dla liczby ujemnej.

Przykład:

Chcemy przeprowadzić mnożenie liczb "-2" oraz "3". Na wstępnie dokonujemy rozszerzenia znakowego liczb do 8 bitów:

-2 = 1110(U2) = 1111 1110(U2)
3 = 0011(U2) = 0000 0011(U2)

Po wykonaniu rozszerzenia liczby mnożymy standardowo:

11111110
* 00000011
11111110
+ 11111110  

1011111010

Należy zauważyć, że wynik mnożenia może być o długości sumy obydwu mnożonych liczb. Żeby otrzymać prawidłowy wynik trzeba zignorować w naszym przykładzie bity wyniku przekraczające poza 8 bit licząc od lewej strony.

Iloraz:

Najprostszym sposobem przeprowadzenia dzielenia 2 liczb w kodzie U2 jest zamiana tych liczb na liczby dodatnie. Następnie dokonujemy dzielenia liczb dodatnich tak jak dzielimy liczby w naturalnym kodzie dwójkowym. Jeśli wyjściowe liczby różniły się znakami to wynik zamieniamy na ujemny, jeśli znaki dzielonych liczb były takie same to pozostawiamy dodatni wynik. Wyjaśnia to poniższy przykład:

Przykład:

Podzielimy liczbę 6 przez -3:

6 = 0110(U2)
-3 = 1101(U2) - dokonujemy zamiany na liczbę przeciwną czyli 3 = 0011(U2)

Dzielimy liczbę 0110 przez 0011:

    10

 0110  :0011
-011

 000

Otrzymaliśmy wynik 0010. Ponieważ znaki dzielnej i dzielnika różniły się na początku, zmieniamy wartość otrzymanej liczby na przeciwną czyli: 1110. Nasz wynik w kodzie U2 ma następującą postać:

1110(U2) = -2(10)

Sytuacja ulega skomplikowaniu jeśli w wyniku dzielenia otrzymujemy resztę. Należy pamiętać, że reszta ma zawsze ten sam znak co dzielna. Poniższa tabelka podsumowuje reguły określania znaków wyników i reszty z dzielenia:

Reguły znaków przy dzieleniu liczb całkowitych
DzielnaDzielnikWynikReszta
0000
0110
1011
1101

Uwaga!
Sposób dokonywania konwersji na liczbę przeciwną w kodzie U2:
Zgodnie z powyższym przykładem:
Mamy liczbę 0010(U2) = 2(10) , chcemy przekonwertować ją na liczbę przeciwną. W tym celu zamieniamy każdy bit naszej liczby na wartość przeciwną:

1101

Następnie do otrzymanej liczby dodajemy 1:

1101 + 1 = 1110(U2) = -2(10)


Nadmiar i niedomiar w kodzie U2:

W trakcie wykonywania operacji arytmetycznych w kodzie U2 może dojść do przekroczenia dozwolonego zakresu liczby możliwej do zapisania na określonej liczbie bitów. Sytuacje taką nazywamy nadmiarem bądź też niedomiarem. Nadmiar występuje wówczas gdy przekraczamy górny zakres, niedomiar natomiast gdy przekraczamy dolny zakres liczby. W konsekwencji występuje zmiana znaku wyniku operacji w momencie kiedy nie powinna ona nastąpić, tak powstaje błąd.

Przykład:

Załóżmy iż operujemy na 4 bitach w kodzie U2 i chcemy dodać do siebie liczby 7 i 1:

01117
+ 0001
+ 1
10008

Otrzymany wynik nie jest poprawny w tym kodzie, ponieważ liczba 8, którą powinniśmy uzyskać wykracza poza górny zakres wartości 4 bitowego kodu U2 (równy 7) i nie można jej poprawnie przedstawić. W celu uzyskania prawidłowego wyniku należy rozszerzyć zakres bitów do 5.

Podobną sytuację dostaniemy próbując dodać 2 liczby ujemne np. -6 oraz -3:

1010-6
+ 1101
+ -3
10111-9

Liczba -9 wykracza poza dolny zakres wartości 4 bitowego kodu U2 (równy -8). Dlatego nie możemy przedstawić wyniku poprawnie na 4 bitach.

 

Wykonanie Radosław Kędzierski