"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:
0100 | 0101 | 11100 |
+ 0010
| + 110
| + 11011
|
0110 | 1 011 | 1 10111 |
4 + 2 = 6 | 5 + (-2) = 3 | (-4) + (-5) = (-9) |
011 | 0101 | 1100 |
- 010
| - 1110
| - 1011
|
001 | 1 0111 | 0001 |
3 - 2 = 1 | 5 - (-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:
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 |
Dzielna | Dzielnik | Wynik | Reszta |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
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:
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.
|