Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

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:

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

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

Zamiana liczb dodatnich

Dla przykładu przedstawimy liczbę $$50$$ na ośmiu bitach w U2.

Najpierw zamieniamy ją na system dwójkowy:

$$50\ =\ (110010)_2$$

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

$$50\ =\ (00110010)_{U2}$$

Zamiana liczb ujemnych

Sposób I

Teraz zamieńmy liczbę $$-50$$ na system U2.

  1. Podnosimy liczbę 2 do potęgi liczby bitów, na której zapisujemy liczbę i odejmujemy od otrzymanej wartości wartość bezwzględną zamienianej liczby:$$2^8-|-50|=256-50=206$$
  2. Otrzymaną liczbę zamieniamy na na system dwójkowy: $$206 = (11001110)_2$$
  3. Wyznaczoną liczbę zapisujemy na polu 8 bitów otrzymując rozwiązanie: $$(11001110)_{U2}$$

Podsumowując, stosujemy wzór: 

$$2^{liczba\ bitów}-|n|$$gdzie to całkowita ujemna liczba, którą zamieniamy na system U2, a "liczba bitów", to pole, na którym zapisujemy liczbę.

Sposób II

Tu algorytm jest bardziej skomplikowany.

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

$$|-50|=50$$

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

$$50\ =\ (110010)_2$$

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

$$50\ =\ 00110010$$

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

~$$(00110010)\ =\ 11001101$$

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

$$11001101\ +\ 1\ =\ 11001110$$

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

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

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ą:

$$(11001110)_{U2}$$

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

$$-2^7+2^6+2^3+2^2+2^1=-128+64+8+4+2=-50$$

Narzędzia

System operacyjny Windows 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

$$-1$$ na ośmiu bitach: $$11111111$$

$$100$$ na ośmiu bitach: $$01100100$$

$$-20$$ na sześciu bitach: $$101100$$

$$-2$$ na pięciu bitach: $$11110$$.