KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2013

PYTANIE NR 37.
Liczba ujemna [-16(10)] zapisana w kodzie uzupełnień do dwóch ZU2(U2) ma postać
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W kodzie uzupełnień do dwóch dla -n w zapisie k-bitowym można użyć wzoru 2k−n. Dla k=8: 28−16=256−16=240, a 240(10)=11110000(2). Równoważnie: 00010000 → inwersja 11101111 → +1 daje 11110000.

Pełne wyjaśnienie:

Kod uzupełnień do dwóch (ZU2/U2) jest standardową metodą zapisu liczb całkowitych ze znakiem w komputerach. Najstarszy bit (MSB) pełni rolę bitu znaku: 0 oznacza liczbę nieujemną, a 1 liczbę ujemną. Kluczowe jest to, że interpretacja zależy od liczby bitów – w tym zadaniu wynika ona z odpowiedzi (8 bitów).

Aby zapisać -16 w 8-bitowym ZU2, można skorzystać z dwóch równoważnych metod:

  • Metoda "inwersja + 1": zapisujemy |16| w binarnym na 8 bitach: 00010000(2). Następnie odwracamy wszystkie bity (uzupełnienie do jedności): 11101111(2). Na końcu dodajemy 1: 11101111 + 1 = 11110000(2).
  • Metoda wzoru: dla liczby ujemnej -n w k bitach: 2k − n. Dla k=8 i n=16: 28 − 16 = 256 − 16 = 240. Liczba 240 w systemie dwójkowym to 11110000(2).

Dlatego poprawny zapis -16 w 8-bitowym ZU2 to 11110000(2).

Dlaczego pozostałe odpowiedzi są błędne?

  • "00010000(2)" to +16 w zwykłym zapisie binarnym (MSB=0), czyli liczba dodatnia, nie ujemna.
  • "10000000(2)" w 8-bitowym ZU2 oznacza -128 (to wartość minimalna w zakresie -128…127), więc nie odpowiada -16.
  • "01110000(2)" ma MSB=0, więc jest dodatnia; w zapisie bez znaku to 112, a w signed nadal dodatnia 112.

W praktyce ta umiejętność przydaje się w interpretacji bajtów w pamięci, rejestrach oraz w debugowaniu, gdzie te same bity mogą być pokazane jako "signed" lub "unsigned".

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Kod uzupełnień do dwóch to standardowy zapis liczb całkowitych ze znakiem w komputerach. Najstarszy bit oznacza znak, a wartość ujemną uzyskuje się przez odwrócenie bitów liczby dodatniej i dodanie 1. Dzięki temu dodawanie i odejmowanie działa spójnie w ALU.
Najczęściej: (1) zapisz wartość bezwzględną na ustaloną liczbę bitów, (2) wykonaj inwersję wszystkich bitów, (3) dodaj 1. Alternatywnie użyj wzoru 2k−n dla k bitów. Zawsze kontroluj, ile bitów ma wynik.
Sama inwersja daje uzupełnienie do jedności (U1), które nie jest tym samym co ZU2. Dodanie 1 przesuwa reprezentację tak, by arytmetyka działała poprawnie (jedno zero i poprawne dodawanie/odejmowanie). To kluczowy krok, który często bywa pomijany.
Ustal liczbę bitów k, oblicz 2k, a potem odejmij n (wartość bezwzględną). Otrzymana liczba dodatnia jest dokładnie tym samym wzorcem bitów, który reprezentuje -n w ZU2. Na końcu zamień wynik na system dwójkowy.
Dla 8-bitowego ZU2 zakres wynosi od -128 do +127. Wynika to z faktu, że jeden bit jest bitem znaku, a wartości ujemne zajmują połowę przestrzeni kodowej. Warto pamiętać, że 10000000(2) to -128, a 01111111(2) to +127.
Nie zawsze. Ten sam ciąg bitów zależy od interpretacji i szerokości. W 8-bitowym ZU2 11110000(2) oznacza -16, ale jako liczba bez znaku (unsigned) oznacza 240. Dlatego w praktyce w narzędziach diagnostycznych trzeba sprawdzać tryb signed/unsigned.
W kodzie znak-moduł ujemna liczba ma ustawiony bit znaku i niezmieniony moduł (np. -16 byłoby 10010000). W ZU2 nie ma "czystego modułu" po ustawieniu znaku: reprezentacja powstaje przez inwersję i dodanie 1, więc układ bitów wygląda inaczej (dla -16: 11110000).
ZU2 upraszcza sprzętową arytmetykę: odejmowanie można zrealizować jako dodawanie liczby ujemnej, bez osobnych obwodów dla znaku. Dodatkowo jest jedna reprezentacja zera, co eliminuje problemy typowe dla znak-moduł. To zwiększa spójność operacji w systemie.
Jeśli liczba jest potęgą dwójki, warto pamiętać wzorzec: dla -16 w 8 bitach końcówka to cztery zera, a wyższe bity to jedynki: 11110000. Można też policzyć 256−16=240 i zamienić 240 na binarny. Nadal trzeba pilnować, że to 8 bitów.
Najczęstsze to: pominięcie dodania 1 po inwersji, mylenie ZU2 z kodem znak-moduł oraz interpretowanie wyniku jako unsigned (0–255) zamiast signed (-128–127). Warto też uważać na liczbę bitów: 8, 16 i 32 bity dają inne zapisy dla tych samych wartości.
info

Statystycznie 42% uczniów zna prawidłową odpowiedź. trudne

Według specjalistów z branży: "W kodzie uzupełnień do dwóch dla -n w zapisie k-bitowym można użyć wzoru 2k−n."

Źródła:

  • Wikipedia: Two's complement (opis metody i przykłady) https://en.wikipedia.org/wiki/Two%27s_complement - dostęp 2026-03-01
  • Wikipedia (PL): Uzupełnienie do dwóch (definicja i sposób obliczania) https://pl.wikipedia.org/wiki/Uzupe%C5%82nienie_do_dw%C3%B3ch - dostęp 2026-03-01
  • Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 1: Basic Architecture, rozdział o typach danych/liczbach całkowitych (signed binary integers, two’s complement), https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html - dostęp 2026-03-01

Materiały:

  • Podstawy arytmetyki komputerowej: rozdziały o reprezentacji liczb ze znakiem i ZU2
  • Materiały kursowe o systemach liczbowych (binarny, dziesiętny, szesnastkowy) i konwersjach
  • Ćwiczenia: zamiana liczb ujemnych na ZU2 dla różnych szerokości (8/16/32 bity)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego