Kod uzupełnień do jedności to sposób zapisu liczb całkowitych oznaczany jako ZU1 lub U1. Liczby dodatnie zapisywane są jak w naturalnym kodzie binarnym, przy czym najbardziej znaczący bit – traktowany jako bit znaku – musi mieć wartość 0. Do reprezentowania liczb ujemnych wykorzystywana jest bitowa negacja danej liczby, co sprawia, że bit znaku ma wartość 1. Wynika z tego również występowanie dwóch reprezentacji zera: +0 (00000000U1) i −0 (11111111U1). W związku z tym liczby zapisane w ZU1 na n bitach pochodzą z zakresu:
co daje zakres identyczny jak w reprezentacji znak-moduł. Dla 8 bitów (bajta) są to liczby od −127 do 127.
Porównanie U1 z U2
Dla reprezentacji bitowej, w której najstarszy bit jest równy 0 (0xxxxxx...x), nie ma znaczenia, czy jest to reprezentacja U1 czy U2 – wartość liczby jest taka sama. Reprezentacje z najstarszym bitem równym 1 oznaczają ujemne liczby lub −0 w U1 oraz ujemne liczby w U2, stąd jeśli reprezentację bitową 1xxxxx...x potraktować jako zapis U1, liczba będzie o 1 większa, niż gdyby potraktować go jako U2[1].
Dodawanie i odejmowanie
Dodawanie liczb w U1 jest podobne do dodawania liczb binarnych, z tą różnicą, że powstałe przeniesienie poza najstarszy bit należy dodać do wynikowej sumy. Na przykład obliczając wartość wyrażenia 7 + (−3) oczekujemy wyniku 4. Dodając binarnie te liczby zapisane w kodzie U1, dostaniemy liczbę 3 oraz przeniesienie, które dodajemy do otrzymanej liczby aby otrzymać ostateczny wynik 4:
111111 (przeniesienia na poszczególnych bitach)
00000111U1 710
+ 11111100U1 −310
----------
100000011
00000011U1 310 (wynik obcięty do zakresu liczby)
+ 00000001U1 110 (dodajemy przeniesienie)
----------
00000100U1 410 (ostateczny wynik)
Aby wykonać odejmowanie wystarczy odwrócić bity drugiej liczby i tak powstałe liczby dodać.
Przypisy
Zobacz też