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".