Powrót do listy

Liczby binarne ze znakiem i kod U2 (Uzupełnień do Dwóch): Standard procesorów

W dotychczasowych rozważaniach operowaliśmy na tzw. liczbach bez znaku (unsigned), które mogą przyjmować wyłącznie wartości dodatnie lub zero. Jednak w rzeczywistych systemach informatycznych i procesorach konieczna jest obsługa temperatur ujemnych, sald ujemnych czy ujemnych współrzędnych graficznych. W ramach przedmiotu UTK (Urządzenia Techniki Komputerowej) zrozumienie sposobu, w jaki procesor reprezentuje liczby ujemne za pomocą kodu U2, jest absolutnym kluczem do zrozumienia architektury jednostki arytmetyczno-logicznej (ALU).

1. Problem reprezentacji liczb ze znakiem i kod U1

Przed wprowadzeniem współczesnych standardów inżynierowie próbowali stosować prostsze metody zapisu liczb ujemnych:

2. Kod Uzupełnień do Dwóch (U2 / Two's Complement)

Aby wyeliminować wady poprzednich systemów, współczesna technika cyfrowa powszechnie stosuje kod U2:

3. Algorytm wyznaczania liczby ujemnej w kodzie U2

Aby zapisać ujemną wartość dziesiętną (np. $-5$) w postaci binarnej U2 na 8 bitach, wykonujemy dwa kroki:

4. Dlaczego kod U2 jest rewolucyjny dla procesorów?

Największą zaletą kodu U2 jest fakt, że procesor nie potrzebuje osobnego układu do odejmowania:

Operacja odjmowania (np. $A - B$) jest wewnątrz jednostki ALU automatycznie zamieniana na dodawanie liczby ujemnej ($A + (-B)$ w kodzie U2). Dzięki temu ten sam fizyczny układ sumatora cyfrowego obsługuje zarówno dodawanie, jak i odejmowanie liczb zarówno dodatnich, jak i ujemnych.

Strategia technika

Projektując niskopoziomowe oprogramowanie dla mikrokontrolerów lub analizując pakiety sieciowe i struktury danych, zawsze zwracaj uwagę na deklarację typu zmiennej (np. signed int kontra unsigned int). Pomylenie liczby ze znakiem (U2) z liczbą bez znaku podczas interpretacji surowych bajtów z czujników lub pamięci prowadzi do drastycznych błędów odczytu dużych wartości ujemnych traktowanych jako gigantyczne liczby dodatnie.