Przeczytaj
Kod uzupełnień do dwóch – podstawy
W przeciwieństwie do systemu binarnego, w kodzie uzupełnień do dwóch (U2) najstarszy bitnajstarszy bit ma wagę ujemną. Pozostałe elementy w systemie U2 są takie same jak w klasycznym zapisie binarnym:
Wartość bitów na kolejnych pozycjach | xIndeks dolny n‑1n‑1 | xIndeks dolny n‑2n‑2 | … | xIndeks dolny 11 | xIndeks dolny 00 |
Waga pozycji w systemie dwójkowym | -2Indeks górny n‑1n‑1 | 2Indeks górny n‑2n‑2 | … | 2Indeks górny 11 | 2Indeks górny 00 |
W efekcie kod uzupełnień do dwóch pozwala na zapisywanie liczb całkowitych dodatnich oraz ujemnych. W przypadku użycia n bitów zakres wartości liczb całkowitych w systemie U2 mieści się w granicach:
Zauważmy, że zapis taki jest niesymetryczny. W przypadku liczb ośmiobitowych możemy przedstawić wartości od –128 do +127 (liczba –2Indeks górny 77 nie ma „dodatniego” odpowiednika).
Skoro waga najstarszego bitu liczby jest ujemna, to kiedy jej mnożnik xIndeks dolny n‑1n‑1
:
ma wartość 1 – liczba jest ujemna;
ma wartość 0 – liczba jest dodatnia lub równa zero.
Najstarszy bit nazywany jest bitem znakubitem znaku.
Przekształcanie zapisu U2 do postaci dziesiętnej
Jeżeli chcemy przekształcić do postaci dziesiętnej liczbę zapisaną w kodzie U2, korzystamy ze wzoru poznanego w czasie poprzedniej lekcji. Pamiętajmy, że waga najstarszego bitu jest ujemna.
Wartość liczby zapisanej w systemie U2 {xIndeks dolny n‑1n‑1 xIndeks dolny n‑2n‑2 ... xIndeks dolny 11 xIndeks dolny 00}Indeks dolny (U2)(U2) wynosi:
Przekształćmy do postaci dziesiętnej liczbę 11000011Indeks dolny (U2)(U2):
Ponieważ bit znaku miał wartość 1, otrzymaliśmy liczbę ujemną. Spróbujmy przekształcić do systemu dziesiętnego liczbę, której bit znaku jest równy 0.
Przekształćmy liczbę 01010100Indeks dolny (U2)(U2) do postaci dziesiętnej:
Tym razem otrzymaliśmy liczbę dodatnią.
Zapisywanie liczb w kodzie U2
Chcąc zamienić dodatnią liczbę zapisaną w systemie dziesiętnym na postać w 8‑bitowym kodzie U2, przekształcimy ją najpierw do postaci dwójkowej (postępując według poznanego wcześniej schematu). Otrzymaną liczbę uzupełnia się z lewej strony tyloma zerami, aby powstał ciąg złożony z ośmiu bitów.
Przedstawmy liczbę 35 zapisaną w kodzie uzupełnień do dwóch:
Liczba przeciwna
Gdybyśmy chcieli zmienić znak liczby z ostatniego przykładu, możemy zrobić to na dwa sposoby.
I sposób
Zamiana na liczbę przeciwną polega na wykonaniu następujących czynności:
zanegowaniu wszystkich bitów liczby (zamiany 1 na 0 oraz 0 na 1),
dodaniu 1 do otrzymanej liczby.
Zamieńmy liczbę 00100011Indeks dolny (U2)(U2) w liczbę przeciwną.
dokonujemy inwersji (negujemy wszystkie bity):
do wyniku dodajemy 00000001:
Liczby 00100011Indeks dolny (U2)(U2) oraz 11011101Indeks dolny (U2)(U2) mają takie same wartości bezwzględne, ale przeciwne znaki.
II sposób
Dla liczb n‑bitowych wartości przeciwne uzyskujemy, odejmując liczbę od dwukrotnej wagi najstarszego bitu:
Zamieńmy liczbę 00100011Indeks dolny (U2)(U2) w liczbę przeciwną korzystając z drugiej metody:
Otrzymaliśmy ten sam wynik co w poprzednim przykładzie.
Działania na liczbach zapisanych w kodzie U2
Operacje dodawania i odejmowania na liczbach zapisanych w kodzie uzupełnień do dwóch wykonuje się tak samo jak na zwykłych liczbach dwójkowych. Mnożenie, dzielenie i pierwiastkowanie są z kolei bardziej skomplikowane i pracochłonne.
Wykonajmy dodawanie dwóch liczb w systemie U2: 00111010 oraz 10100100:
Teraz wykonajmy operację odejmowania wykorzystując liczby w U2: 00101011 oraz 11100100:
Zauważmy, że w przypadku odejmowania dwóch najstarszych bitów możemy „zapożyczyć” 10Indeks dolny (2)(2) z lewej strony, poza zapisanymi liczbami. Dzieje się tak ponieważ najstarszy bit to bit znaku – umożliwia nam to przekształcenie odejmowania liczby ujemnej na dodawanie liczby dodatniej. Taki sam wynik otrzymalibyśmy, gdybyśmy zamienili liczbę odejmowaną na liczbę dodatnią, po czym zapisali działanie jako dodawanie.
Słownik
bit mający największą wagę (w słowie maszynowym wysunięty najbardziej w lewo); nazywany również najbardziej znaczącym bitem liczby
w kodzie binarnym najbardziej znaczący bit liczby, decydujący o znaku liczby