Strona główna » Algorytmy » Artykuły » Kodowanie U1
 

Kodowanie U1

· Znak - Moduł · Kodowanie U1 ·

Wstęp

U1 to sposób kodowania liczb całkowitych w urządzeniach elektronicznych. Jego logika jest bardzo podobna do kodowania Znak - Moduł. Tym razem jednak pierwszy znak nie oznacza znaku, a posiada konkretną wartość, która jest następnie dodawana do wartości liczby.

Opis kodowania

Przypuśćmy, że mamy zapis składajacy się z n bitów. Wtedy do obliczenia wartości tego zapisu skorzystamy ze wzoru: WZM = bn - 1·(-2n-1 + 1) + bn - 2 + .. + b2 + b1 + b0. Przeliczmy na początek kilka przykładów:

Zapis U1PrzeliczenieZakodowana
liczba
01010·(-23 + 1) + 22 + 20 = 55
00100·(-23 + 1) + 21 = 22
11011·(-23 + 1) + 22 + 20 = -2-2
10111·(-23 + 1) + 21 + 20 = -4-4

Jak można zauważyć jeśli pierwszy bit jest ustawiony na 1 to wartość jest coraz bliższa zera, gdy wartość pozostałych modułów jest coraz większa. Przeciwnie jest z liczbami dodatnimi. W tym przypadku liczba jest coraz bliższa zera, gdy bity prócz pierwszego tworzą jak najmniejszą wartość.

Podany wcześniej wzór pociąga konsekwencje związane z zapisem. Liczby dodatnie to cyfra 0, a następnie moduł zapisany binarnie, ale liczby ujemne trzeba przeliczać w specjalny sposób. Na początek należy obliczyć jej moduł. Potem otrzymaną wartość zamienić na system dwójkowy i dopisać z przodu tyle zer ile bitów ma mieć zapis. Na koniec wystarczy zanegować całe wyrażenie. Spróbujmy przeliczyć kilka wartości dodatnich:

Liczba
dziesiętna
ModułKod U1
4bity
Sprawdzenie
1100010·(-23 + 1)+ 20 = 1
711101110·(-23 + 1) + 22 + 21 + 20 = 7

Oraz kilka wartości ujemnych:

Liczba
dziesiętna
ModułUzupełnienieNegacja
(Kod U1 4bity)
Sprawdzenie
-11000111101·(-23 + 1) + 22 + 21 = -1
-4100010010111·(-23 + 1) + 21 + 20 = -4
-7111011110001·(-23 + 1) = -7

Zauważmy, że ponownie zakres danych jaki może przechowywać to kodowanie to [2n - 1 + 1, 2n - 1 - 1]. Można tutaj zauważyć, że 0 ma podwójną reprezentację, ponieważ 111..11ZM = 000..00ZM = 0. Powoduje to, że czasem zero jest "dodatnie", a czasem jest "ujemne".

Arytmetyka

Dodawanie

Dzięki temu, że pierwszy bit posiada konkretną wartość dodawanie dwóch liczb w teorii nie różni się niczym od już znanego dodawania liczb binarnych. Problem pojawa się jednak, gdy liczba przekroczy maksymalną wartość zapisu na n bitach. Wtedy należy dokonać korekty wyniku poprzez dodanie wartości 1.

  0001
+ 0011
  0100
1 + 3 = 4
  0011
+ 1001
  1100
3 + (-6) = -3

Problem pojawa się jednak, gdy liczba przekroczy maksymalną wartość zapisu na n bitach. Wtedy należy dokonać korekty wyniku poprzez dodanie wartości 1. Oto przykładowe działania, które wymagają zastosowania tej reguły:

  1001
+ 1111
  1001
(-6) + 0 = (-6)
  0011
+ 1110
  0010
3 + (-1) = 2

Odejmowanie

W matematyce odejmowanie to inaczej dodawanie liczby przeciwnej. W kodowaniu U1 bardzo łatwo zamienić liczbę na przeciwną. Wystarczy w tym celu jedynie zanegować liczbę. Innymi słowy w celu odjęcia dwóch wartości liczbę odejmowaną zamieniamy na przeciwną i w ten sposób upraszczamy zadanie do dodawania.

  1001
- 1010
  1001
+ 0101
  1110
(-6) - (-5) =
(-6) + 5 = (-1)
  1000
- 1000
  1000
+ 0111
  1111
(-7) - (-7) =
(-7) + 7 = 0

Liczba przeciwna

W celu otrzymania liczby przeciwnej wystarczy zanegować wszystkie bity. Warto zauważyć, że negacja wartości zero nie zmienia jego wartości. Rozpatrzmy poniższe przypadki na zapisie 4 bitowym:

Wartość
dziesiętna
Zapis U1Liczba
przeciwna
0np. 11110000
100011110
300111100
-710000111

Uwagi końcowe

Należy pamiętać o tym, że wynik dodawania/odejmowania nie zawsze musi się mieścić w zakresie. Jeśli wynik jest za duży to mówimy o nadmiarze, a jeśli wynik jest za mały to mówimy o niedomiarze. Jak można się spodziewać którykolwiek z tych wyjątków może wystąpić tylko wtedy, gdy znaki są takie same. Wtedy po dodaniu takich liczb pierwszy bit zmieni się na przeciwny. Wykrycie tego jest najprostszym sposobem wykrycia, że wynik nie mógł się zmieścić w określonym zakresie.

  0001
+ 0111
  1111
1 + 7 = 8 ≠ 0
  1011
+ 1001
  0101
(-4) + (-6) = (-10) ≠ 5