Poprawna odpowiedź to 01010₂ w systemie uzupełnień do dwóch, bo liczba 10₁₀ jest dodatnia i w standardowej reprezentacji na ustaloną liczbę bitów (np. 5 bitów) zapis dodatnich liczb w kodzie U2 jest identyczny jak zwykły zapis binarny. Najpierw zamieniamy 10₁₀ na system binarny: 10₁₀ = 1010₂. Jeśli przyjmujemy długość słowa 5 bitów, to po prostu dopełniamy z lewej strony zerem: 01010₂. W kodzie U2 najważniejszy (najstarszy) bit jest bitem znaku: 0 oznacza liczbę dodatnią, 1 – ujemną. Tutaj mamy 0 na początku, więc wszystko się zgadza: dodatnia dziesiątka. Moim zdaniem kluczowe jest zapamiętanie, że dla liczb dodatnich nic „magicznego” się nie dzieje – U2 różni się od zwykłego binarnego tylko dla liczb ujemnych. W praktyce, w procesorach, rejestrach i pamięci operacyjnej właśnie tak to wygląda: dodatnie wartości są przechowywane dokładnie tak, jak w czystym binarnym, a ujemne są zakodowane jako uzupełnienie do dwóch. Dzięki temu układy arytmetyczno‑logiczne (ALU) mogą wykonywać dodawanie i odejmowanie na jednym, wspólnym mechanizmie, bez osobnych obwodów dla liczb ze znakiem i bez znaku. To jest standardowa, powszechnie stosowana metoda reprezentacji liczb całkowitych w architekturach zgodnych z praktycznie wszystkimi współczesnymi CPU (x86, ARM itd.). Warto też kojarzyć zakres: dla 5 bitów w U2 mamy od −16 do +15. 01010₂ mieści się w tym zakresie i odpowiada dokładnie +10. Gdyby to była liczba ujemna, mielibyśmy na początku 1 i trzeba by wykonać procedurę „odwróć bity i dodaj 1”, żeby odzyskać wartość dziesiętną.
Warianty, w których na pierwszej pozycji pojawia się jedynka, sugerują liczbę ujemną w kodzie uzupełnień do dwóch. I tu zwykle zaczynają się typowe pomyłki. Wiele osób myśli: „skoro 10₁₀ to 1010₂, to wystarczy dopisać coś z lewej strony, obojętnie jakie bity” albo próbuje zgadywać na zasadzie podobieństwa do dziesiętnego. Niestety w systemach pozycyjnych tak to nie działa. W kodzie U2 pierwszy bit jest bitem znaku, a jego wartość ma bardzo konkretne znaczenie. Jeśli ten bit jest równy 1, to cała liczba jest ujemna i nie można jej już traktować jak zwykłego binarnego dodatniego zapisu. To jest najczęstszy błąd: patrzenie na 11010₂ czy 10010₂ jak na „trochę większą dziesiątkę”. W rzeczywistości są to inne liczby, o całkowicie innym znaczeniu. Druga typowa pułapka to mylenie zwykłego kodu binarnego z kodem ze znakiem. W kodzie U2 dodatnie liczby zapisujemy tak samo jak w binarnym, ale tylko wtedy, gdy bit znaku wynosi 0. Gdy pojawia się 1 na początku, trzeba zastosować procedurę odwrotną: odczytać wartość ujemną poprzez odwrócenie wszystkich bitów i dodanie 1, a dopiero potem przeliczyć wynik na dziesiętny. Z mojego doświadczenia wynika, że wiele osób próbuje robić to „na oko”, co kończy się kompletnym rozjazdem wartości. Dobre praktyki mówią jasno: najpierw sprawdzamy bit znaku, potem decydujemy, czy traktujemy słowo binarne jako dodatnie, czy trzeba wyliczyć jego wartość jako liczbę ujemną. W projektowaniu elektroniki cyfrowej, w programowaniu niskopoziomowym czy przy analizie rejestrów sprzętowych takie niuanse mają ogromne znaczenie. Jedno źle zinterpretowane słowo w U2 i algorytm zaczyna zwracać ujemne wyniki tam, gdzie spodziewamy się dodatnich, albo odwrotnie. Dlatego nie wystarczy, że zapis „wygląda znajomo” – musi być zgodny z zasadami reprezentacji liczb w systemie uzupełnień do dwóch.