Kod uzupełnień do dwóch (U2)
Kod uzupełnień do dwóch zwany często kodem U2 jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.
Jest on zaimplementowany w większości procesorów ponieważ operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. Wiąże się to z mniejszym zapotrzebowaniem na kody 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).
Najstarszy bit liczby jest bitem znaku liczby, 0 oznacza plus, 1 minus, w dodawaniu i odejmowaniu liczb jest on traktowany jako bit liczby. Niewątpliwą zaletą tego systemu w przeciwieństwie do systemu znak-moduł jest istnienie tylko jednego zera.
Wartość dziesiętną liczby zapisanej w kodzie U2 obliczamy wykorzystując poniższy wzór:
bn-1bn-2bn-3...b2b1b0 = bn-1 * -(2n-1) + bn-22n-2 + bn-32n-3 + ... + b222 + b121 + b020
b - bit, cyfra dwójkowa: 0 lub 1
n - liczba bitów w zapisie liczby
Przykład:
Zapis liczby dodatniej:
01101011(U2) = 64 + 32 + 8 + 2 + 1 = 107(10)
Zapis liczby ujemnej:
11101011(U2) = -(27) + 64 + 32 + 8 + 2 + 1 = -128 + 107 = (-21)(10)
Zakres liczby w kodzie uzupełnień do dwóch.
Zakres n bitowej liczby w kodzie U2 wynosi:
Z(U2) = (-2n-1, 2n-1 - 1)
Zakres liczb w kodzie U2 jest niesymetryczny - liczb ujemnych jest o jedną więcej niż liczb dodatnich.
Wynika to z tego, że największą liczbę zapisaną w kodzie uzupełnień do dwóch uzyskujemy dla bitu znaku równego 0, a
pozostałych bitów równych 1.
Ponieważ pozostałe bity przedstawiają wartość w naturalnym kodzie binarnym i jest ich n-1, to
max(U2) = 2n-1 - 1
Z kolei najmniejszą wartość liczby zapisanej w kodzie uzupełnień do dwóch otrzymujemy dla bitu znaku równego 1, a
pozostałych bitów równych 0.
W tym przypadku wartość liczby jest równa wadze pozycji znakowej, czyli
min(U2) = -(2n-1)
|