Kod uzupełnień do jedności

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

edytuj

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

edytuj

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

edytuj

Zobacz też

edytuj