Liczba 10(10) w systemie uzupełnień do dwóch jest równa
A. 01010U2
B. 10010U2
C. 11010U2
D. 01110U2
Liczba 10₍₁₀₎ w systemie uzupełnień do dwóch zapisana na 5 bitach ma postać 01010 w U2. Najważniejsze jest tu to, że dla liczb dodatnich zapis w U2 wygląda tak samo jak zwykły zapis binarny, tylko trzeba pilnować bitu znaku. W 5-bitowym kodzie U2 najstarszy bit, czyli ten z lewej strony, informuje o znaku: 0 oznacza liczbę nieujemną, a 1 liczbę ujemną. Sama liczba 10 w systemie binarnym to 1010, bo 8 + 2 = 10. Ponieważ odpowiedzi mają 5 bitów, dopisujemy z lewej strony 0 jako bit znaku i dostajemy 01010. To jest właśnie poprawny zapis. Z mojego doświadczenia warto zawsze najpierw sprawdzić długość słowa bitowego, bo w informatyce praktycznej, np. przy rejestrach procesora, typach całkowitych czy analizie ramek danych, liczba bitów ma ogromne znaczenie. Dla 5-bitowego U2 zakres wartości to od -16 do 15, więc 10 mieści się bez problemu. Dobra praktyka jest taka: ustalasz liczbę bitów, sprawdzasz znak, a potem dopiero interpretujesz wartość. Dzięki temu nie pomylisz zwykłego zapisu binarnego z kodowaniem liczb ze znakiem.
W tym zadaniu łatwo pomylić zwykły zapis binarny z zapisem w systemie uzupełnień do dwóch, ale zasada jest dość prosta. Liczba 10₍₁₀₎ jest dodatnia, więc w U2 jej najstarszy bit powinien być równy 0. To oznacza, że poprawny zapis na 5 bitach musi zaczynać się od zera i zawierać binarną wartość 1010, czyli razem 01010. Jeżeli zapis zaczyna się od 1, jak 11010 albo 10010, to w 5-bitowym U2 nie oznacza liczby dodatniej, tylko ujemną. Dla 11010 można policzyć wartość przez odwrócenie bitów i dodanie 1: 11010 → 00101 → 00110, czyli wartość bezwzględna 6, więc wynik to -6. Podobnie 10010 oznacza -14, a nie 10. To częsty błąd: ktoś patrzy na końcówkę bitów i ignoruje bit znaku, a w U2 to się niestety nie wybacza. Zapis 01110 też zaczyna się od 0, więc jest dodatni, ale jego wartość to 14, ponieważ 8 + 4 + 2 = 14. Moim zdaniem najlepsza metoda na takie zadania to rozpisanie wag bitów: 16, 8, 4, 2, 1, z pamięcią, że w U2 najstarszy bit ma specjalne znaczenie znaku. W praktyce dokładnie tak interpretuje się dane w procesorach, debugerach, sterownikach i protokołach binarnych, gdzie ten sam ciąg bitów może oznaczać coś zupełnie innego zależnie od przyjętego formatu danych.