narzędzia |
Kod uzupełnień do dwóchKod uzupełnień do dwóch (w skrócie U2 lub ZU2) jest obecnie najpopularniejszym sposobem zapisu liczb całkowitych na bitach. Jego popularność wynika z faktu, że operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. Z tego też powodu oszczędza się na kodach rozkazów procesora. Nazwa kodu wzięła się ze sposobu obliczania liczb przeciwnych. Dla jednobitowej liczby wartość przeciwną obliczamy odejmując daną liczbę od 2 (uzupełniamy jej wartość do dwóch). Analogicznie, dla liczb n-bitowych wartości przeciwne uzyskujemy odejmując liczbę od dwukrotnej wagi najstarszego bitu (2·2n–1 = 2n). W analogiczny sposób można stworzyć np. kod uzupełnień do jedności. Zaletą tego kodu jest również istnienie tylko jednego zera. Przedział kodowanych liczb nie będzie zatem symetryczny. W U2 na n bitach da się zapisać liczby z zakresu:
Dla 8 bitów (bajtu) są to liczby od –128 do 127. Liczba –2n–1 nie posiada swojego przeciwieństwa w n-bitowej reprezentacji kodu U2.
[edytuj] Zapis liczbW dwójkowym systemie liczbowym najstarszy bit liczby n-cyfrowej ma wagę 2n–1. Jedyną różnicą, jaką wprowadza tu kod U2, jest zmiana wagi tego bitu na przeciwną (–2n–1). Bit ten jest nazywany bitem znaku, ponieważ świadczy o znaku całej liczby – jeśli jest ustawiony (=1) cała liczba jest ujemna, jeśli jest skasowany (=0) – liczba jest dodatnia lub równa 0. Zwiększając obszar zajmowany przez liczbę w kodzie U2 (np. z jednego bajtu na dwa), dodawany obszar wypełnia się bitem znaku. System może też być użyty do kodowania liczb rzeczywistych. Wówczas używa się systemu liczb stałoprzecinkowych, bo wymagana jest wtedy umowa co do miejsca położenia przecinka oddzielajacego część całkowitą od ułamkowej. Przyjmuje się, że określona liczba bitów z prawej strony oznacza część ułamkową. Liczby takie można też traktować jako liczby całkowite. Przykład:
Zapis dwójkowy liczb zmiennoprzecinkowych na ogół nie używa wcale kodu U2, bądź używa go tylko do zapisu wykładnika. [edytuj] Przykłady
[edytuj] Liczba przeciwnaAby zamienić liczbę w U2 na przeciwną, należy wykonać dwa kroki:
Można też posłużyć się metodą podaną na wstępie, ale powyższa metoda jest prostsza i działa również na procesorach, które nie mają operacji odejmowania. [edytuj] PrzykładDana jest liczba:
Dokonujemy inwersji:
Zwiększamy o 1:
[edytuj] Dodawanie i odejmowanie liczbDodawanie i odejmowanie w U2 odbywa się standardową metodą – traktujemy liczby jako zwykłe liczby binarne (dodatnie), dodajemy je lub odejmujemy, a wynik otrzymujemy w zapisie U2. Dodawanie i odejmowanie odbywa się łącznie z bitem znaku, a przeniesienia i pożyczki poza najstarszy bit (bit znaku) ignorujemy. Jeśli jednak przepełnienie (lub pożyczka) nie będzie występować jednocześnie na bit znaku i poza niego, wówczas możemy być pewni przekroczenia zakresu wyniku. [edytuj] PrzykładUwaga: przecinek oznacza odddzielenie części całkowitej od ułamkowej, kropka znaku liczby od wartości w U2 Rezerwujemy odpowiednią ilość "bitów" uzupełniając z lewej strony bitem znaku, a z prawej zerami zgodnie z zasadą zapisu w U2.
[edytuj] Dodawanie
[edytuj] OdejmowanieOdejmowanie jest realizowane, podobnie jak dodawanie
Odejmowanie może być zamienione na dodanie liczby przeciwnej, dlatego w niektórych procesorach zrealizowano tylko operację tworzenia liczby przeciwnej i dodawanie. Przykład odejmowania przez zamianę liczby na liczbę przeciwną.
[edytuj] Mnożenie liczb[edytuj] I wariant metody BoothaAlgorytm słowny:
[edytuj] PrzykładUwaga: część całkowita w zapisie binarnym została pominięta - zapis jest postaci bit_znaku.bity_ułamka
Analizuję bity liczby B (od prawej do lewej strony), dodaję i odejmuję liczbę A.
Wynik otrzymujemy w kodzie znak-moduł (ZM). [edytuj] Sprawdzenie
[edytuj] II wariant metody BoothaAlgorytm słowny:
[edytuj] PrzykładUwaga: część całkowita w zapisie binarnym została pominięta - zapis jest postaci bit_znaku.bity_ułamka
Analizuję bity liczby B (mnożnika) od prawej do lewej strony, dodaję i odejmuję liczbę A (mnożną).
Wynik otrzymujemy w kodzie uzupełnień do dwóch. [edytuj] Sprawdzenie
[edytuj] Dzielenie liczb[edytuj] Metoda porównawczaAlgorytm słowny:
[edytuj] PrzykładUwaga: część całkowita w zapisie binarnym została pominięta - zapis jest postaci bity_ułamka
Otrzymany wynik, złożony z kolejnych bitów od q1 do q3 jest modułem liczby wynikowej, postaci q1q2q3. Bit znaku (z) tej liczby określamy na podstawie bitów znaku dzielnej (a) i dzielnika (b) przy pomocy operacji logicznej XOR: Wynik otrzymujemy w kodzie znak-moduł i jest on równy [edytuj] Sprawdzenie
[edytuj] Metoda nierestytucyjnaAlgorytm słowny:
[edytuj] PrzykładUwaga: część całkowita w zapisie binarnym została pominięta - zapis jest postaci bit_znaku.bity_ułamka
Otrzymany wynik, złożony z kolejnych bitów od q0 do q3 jest pseudoilorazem (PQ), gdzie q0 jest jego bitem znakowym, a kolejne są kolejnymi bitami liczby postaci q0q1q2q3. Tak więc Do pseudoilorazu dodajemy poprawkę
Wynik otrzymujemy w kodzie uzupełnień do dwóch. [edytuj] Sprawdzenie
[edytuj] Zobacz też |