następny punkt » |
W niniejszym opracowaniu omówione będą następujące kody stałopozycyjne:
Pominiemy tutaj reprezentację liczb ułamkowych i kody stałopozycyjne przedstawiać będziemy tylko dla liczb całkowitych.
W kodzie ZM moduł liczby całkowitej jest przedstawiany w kodzie NKB, a na najbardziej znaczącej pozycji słowa dwójkowego dodaje się bit znaku: 0 - gdy liczba jest dodatnia i 1 - gdy liczba jest ujemna.
W kodzie U1 liczba dodatnia jest przedstawiana tak jak w kodzie NKB, z warunkiem aby na najbardziej znaczących pozycjach były zera (co najmniej jedno). Reprezentacja liczb ujemnych powstaje przez odjęcie modułu tej liczby od samych jedynek czyli zanegowaniu każdej pozycji. Słowo reprezentuje liczbę ujemną pod warunkiem, że na najbardziej znaczących pozycjach są jedynki (co najmniej jedno). W kodzie U2 liczba dodatnia jest przedstawiana jak w kodzie NKB, z warunkiem aby na najbardziej znaczących pozycjach były zera (co najmniej jedno). Reprezentacja liczb ujemnych powstaje przez dodanie jedynki do najmniej znaczącej pozycji reprezentacji liczb w zapisie U1.
W kodzie polaryzowanym (BIAS) liczba dodatnia jest przedstawiana jak w kodzie NKB i uzupełniana na najbardziej znaczącej pozycji jedynką. Oznacza to uzupełnienie n bitowej liczby o n+1 pozycję, czyli dodanie tzw. polaryzacji (dodanie wartości 2n). Liczby L(A) w kodzie BIAS reprezentuje się przedstawiając w kodzie NKB liczbę 2n + L(A). W ten sposób liczby ujemne, po dodaniu polaryzacji, stają się liczbami dodatnimi, które można przedstawić w kodzie NKB.
Przykład
Rozpatrzmy jak w każdym z kodów przedstawić liczby +2310 i -2310.
W kodzie NKB liczba +2310 może być przedstawiona jako 10111. Zgodnie z tym co powiedziano wyżej w kodzie ZM trzeba przyjąć co najmniej sześciobitowe słowo aby na najbardziej znaczącej pozycji było 0. Dlatego najkrótsze słowo reprezentujące liczbę +2310 w kodzie ZM jest słowem sześciobitowym 010111. Najkrótsze stosowane w komputerach słowa są ośmiobitowe, więc przedstawiając tą samą liczbę jako bajt otrzymamy 00010111. Liczbę ujemną -2310 przedstawia się na sześciu pozycjach jako słowo 110111, a jako bajt 10010111.
W kodzie U1 i U2 liczba +2310 jest reprezentowana jak w kodzie ZM, tj. 010111. Reprezentację liczby -2310 w kodzie U1 otrzymamy biorąc:
111111 -010111 101000
Zwiększając liczbę zer modułu można otrzymać reprezentację liczby na większej liczbie bitów, np. liczbę ośmiobitową:
11111111 -00010111 11101000
Reprezentację liczby -2310 w kodzie U2 otrzymamy dodając do słowa 101000 jedynkę. Otrzymamy słowo 101001. Tą samą liczbę można przedstawić na ośmiu bitach jako 11101001.
W kodzie polaryzowanym reprezentację liczby +2310 otrzyma się biorąc liczbę w kodzie NKB (010111) i uzupełniając ją polaryzacją (2n = 26). Otrzyma się wtedy siedmiobitowe słowo 1010111. Tą samą liczbę można przedstawić np. na ośmiu bitach jako 10010111.
Celem znalezienia reprezentacji liczby ujemnej -2310 należy do jej wartości dodać polaryzację. Dla siedmiobitowej reprezentacji polaryzacja wynosi 26 i wtedy mamy, że
-23 + 26= -23 + 64 = 41
Otrzymamy siedmiobitowe słowo 0101001. Można zauważyć, że jest to słowo reprezentujące liczbę w kodzie U2 uzupełnione zerem na najbardziej znaczącej pozycji. Dla ośmiobitowej reprezentacji polaryzacja wynosi 27 i wtedy mamy, że
-23 + 27= -23 + 128 = 105
Otrzymamy ośmiobitowe słowo 01101001.
Zakładając reprezentacje ośmiobitowe dla wszystkich kodów otrzymamy, że:
ZM U1 U2 BIAS +23 00010111 00010111 00010111 10010111 -23 10010111 11101000 11101001 01101001
Trzeba zwrócić uwagę, że liczby dodatnie w kodach ZM, U1 i U2 mają takie same reprezentacje przy założonej liczbie zer na najbardziej znaczących pozycjach. Natomiast liczba dodatnia w kodzie polaryzowanym powstała jako reprezentacja liczby w kodzie NKB uzupełniona jedynką na najbardziej znaczącej pozycji.
Liczby ujemne w kodach ZM, U1 i U2 mają jedynki na najbardziej znaczącej pozycji. Liczba ujemna w kodzie U1 ma wszystkie pozycje zanegowane w stosunku do liczby dodatniej. Liczba ujemna w kodzie U2 jest o 1 większa od liczby ujemnej w kodzie U1. Liczba ujemna w kodzie polaryzowanym powstała jako reprezentacja w kodzie NKB liczby 128 - 23 = 105. Liczby ujemne w kodzie polaryzowanym mają zawsze 0 na najbardziej znaczącej pozycji. Można zaobserwować, że liczba ujemna w kodzie polaryzowanym jest liczbą z kodu U2 ze zmienionym najbardziej znaczącym bitem.
następny punkt » |