Programowanie i algorytmy

System U2

powrót

System U2 inaczej kod uzupełnień do dwóch jest przeznaczony do przechowywania liczb całkowitych dodatnich i ujemnych. W języku C++ zmienne typu intlong long,  czy char używają tego systemu do przechowywania wartości. Żeby można było wykonywać operacje w tym systemie, należy określić na ilu bitach będziemy operować. 

Zakres wartości dla n bitów mieści się w przedziale:

{tex}[-2^{n-1};\ 2^{n-1}-1]{/tex},

a więc na ośmiu bitach możemy przechować liczby z zakresu {tex}[-128;\ 127].{/tex}

Zamiana liczb dodatnich

Dla przykładu przedstawimy liczbę {tex}50{/tex} na ośmiu bitach w U2.

Najpierw zamieniamy ją na system dwójkowy:

{tex}50\ =\ (110010)_2{/tex}

Następnie z lewej strony dopełniamy zerami tak, aby w sumie otrzymać osiem bitów i w rezultacie otrzymujemy:

{tex}50\ =\ (00110010)_{U2}{/tex}

Zamiana liczb ujemnych

Teraz zamieńmy liczbę {tex}-50{/tex} na system U2. Tu algorytm jest bardziej skomplikowany.

W pierwszym kroku wyznaczamy wartość bezwzględną z tej liczby:

{tex}|-50|=50{/tex}

W drugim kroku otrzymaną liczbę zamieniamy na postać binarną:

{tex}50\ =\ (110010)_2{/tex}

W trzecim kroku przedstawiamy ją na ośmiu bitach:

{tex}50\ =\ 00110010{/tex}

W czwartym kroku negujemy wszystkie bity (każdy bit zamieniamy na przeciwny: zero na jedynkę, jedynkę na zero):

~{tex}(00110010)\ =\ 11001101{/tex}

Na końcu zwiększamy otrzymaną postać o 1:

{tex}11001101\ +\ 1\ =\ 11001110{/tex}

W ten sposób otrzymaliśmy liczbę {tex}-50{/tex} zapisaną na ośmiu bitach w systemie U2:

{tex}-50\ =\ (11001110)_{U2}{/tex}.

Zamiana z U2 na system dziesiętny

Najbardziej znaczący bit (ten który stoi po lewej stronie) określa znak liczby. Jeśli jest to jedynka, to liczba jest ujemna, w przeciwnym razie jest ona dodatnia. Dla przykładu posłużmy się otrzymaną wyżej postacią:

{tex}(11001110)_{U2}{/tex}

Teraz odliczamy kolejne potęgi dwójki począwszy od strony lewej. Przy pierwszym bicie stoi {tex}2^0{/tex}, przy następnym {tex}2^1{/tex}, ..., natomiast przy ostatnim {tex}-2^7{/tex}. Teraz dodajemy tylko te potęgi liczby dwa, które stoją nad cyfrą 1:

{tex}-2^7+2^6+2^3+2^2+2^1=-128+64+8+4+2=-50{/tex}

Narzędzia

System operacyjny Windows 7 jest wyposażony w program calc.exe (kalkulator), który ma możliwość zamienienia liczby całkowitej w systemie dziesiętnym na system U2. Po uruchomieniu tego programu przechodzimy w widok programisty. W lewym dolnym rogu mamy opcję wyboru liczby bitów, po zaznaczeniu Bajt, będziemy mieli do dyspozycji ich osiem. Następnie wpisujemy liczbę całkowitą i jej postać w systemie U2 będzie widoczna tuż pod paskiem do wpisywania liczb.

kalkulator

 

Kilka przykładów

{tex}-1{/tex} na ośmiu bitach: {tex}11111111{/tex}

{tex}100{/tex} na ośmiu bitach: {tex}01100100{/tex}

{tex}-20{/tex} na sześciu bitach: {tex}101100{/tex}

{tex}-2{/tex} na pięciu bitach: {tex}11110{/tex}.