Kod uzupełnień do dwóch – jak zapisać liczbę ujemną w bajcie, dlaczego zero jest tylko jedno i skąd bierze się zakres od -128 do 127.
Komputer nie ma osobnego miejsca na znak minus – ma tylko bity. Trzeba więc umówić się, jak zapisywać liczby ujemne. Powszechnie stosowany jest kod uzupełnień do dwóch, w skrócie U2.
W U2 najstarszy bit pełni rolę znaku: 0 oznacza liczbę nieujemną, 1 oznacza ujemną. Ale to nie jest zwykłe „doklejenie minusa" – reszta bitów też się zmienia. Żeby zapisać liczbę ujemną, bierzemy zapis liczby dodatniej, odwracamy wszystkie bity i dodajemy 1.
Ta konwencja ma dużą zaletę: dodawanie działa bez żadnych wyjątków. Procesor dodaje liczby ujemne tą samą operacją co dodatnie i wynik wychodzi poprawny, więc odejmowanie w ogóle nie musi istnieć jako osobny układ.
Zapisujemy -5 na ośmiu bitach:
000001011111101011111011Sprawdzenie przez dodawanie: 00000101 plus 11111011 daje 100000000. Dziewiąty bit wypada poza bajt, więc zostaje 00000000 – czyli zero. To potwierdza, że mamy liczbę przeciwną.
Ta sama procedura działa w drugą stronę: żeby odczytać wartość liczby ujemnej, odwróć bity, dodaj 1 i postaw minus.
U2 pojawia się w zadaniach o zakresie typów liczbowych i przy pytaniach o przepełnienie. Trzeba umieć podać zakres dla danej liczby bitów i wyjaśnić, dlaczego nie jest on symetryczny.
Na ośmiu bitach zakres wynosi od -128 do 127. Wartości ujemnych jest o jedną więcej, bo w U2 istnieje tylko jedno zero – nie ma osobnego „minus zera", które marnowałoby jedną kombinację.
Bo zero zajmuje jedną z kombinacji „dodatnich". Zostaje ich więc 127, a ujemnych pełne 128. W kodach ze znakiem i modułem istnieje osobne minus zero i tam zakres jest symetryczny, ale marnuje się jedna wartość.
Sytuacja, w której wynik nie mieści się w zakresie – na przykład dodanie 100 do 100 na jednym bajcie. Wynik „zawija się" i wychodzi liczba ujemna, mimo że dodawaliśmy dwie dodatnie.
Jeśli najstarszy bit to 1, odwróć wszystkie bity, dodaj 1 i odczytaj wynik jako zwykłą liczbę dodatnią – to jest moduł. Postaw przed nim minus.
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: