Wiem, że ma to coś wspólnego z uzupełnieniem 2 i dodaniem 1, ale tak naprawdę nie rozumiem, w jaki sposób można zakodować jeszcze jedną liczbę z taką samą liczbą bitów, jeśli chodzi o liczby ujemne.
Wiem, że ma to coś wspólnego z uzupełnieniem 2 i dodaniem 1, ale tak naprawdę nie rozumiem, w jaki sposób można zakodować jeszcze jedną liczbę z taką samą liczbą bitów, jeśli chodzi o liczby ujemne.
Odpowiedzi:
Pomyśl o tym w tych kategoriach. Weź 2-bitową liczbę z poprzedzającym znakiem:
000 = 0
001 = 1
010 = 2
011 = 3
Teraz mamy kilka negatywów:
111 = -1
110 = -2
101 = -3
Czekaj, my też mamy
100 ...
Musi być ujemny, ponieważ bitem znaku jest 1. Więc logicznie musi być -4.
(Edycja: Jak słusznie zauważa WorldEngineer , nie wszystkie systemy numeracji działają w ten sposób - ale te, o które pytasz, czynią.)
Ponieważ nie ma dwóch klas liczb w zakresie liczb całkowitych, ale trzy: liczby ujemne, zero i liczby dodatnie. Zero musi zająć miejsce (byłoby raczej niepraktyczne nie być w stanie reprezentować zera ...), więc albo klasa pozytywna, albo negatywna musi zrezygnować z miejsca. Fakt, że zwykle jest to dodatni zasięg, który musi sprawić, że poświęcenie jest w pewnym stopniu arbitralne, ale na poziomie manipulacji bitami istnieją pewne rzeczy, które sprawiają, że ta decyzja jest wygodniejsza.
Istnieją zasadniczo trzy sposoby reprezentowania liczb całkowitych ze znakiem w postaci binarnej: uzupełnienie 2, uzupełnienie 1 i wielkość znaku. (Dawno temu Biquinary poszedł w ślady ptaka Dodo.)
Uzupełnienie 1 i wielkość znaku mają dwie wartości zerowe, +0 i -0, każda z unikalną reprezentacją. Uzupełnienie 2 ma tylko jedną wartość zerową i jedną reprezentację.
Teraz pole N bitów może kodować 2 ^ N wartości. Odejmij uzupełnienie jeden na 2, a otrzymasz 2 ^ N-1 = 2 ^ (N-1) + 2 ^ (N-1) + 1. Ponieważ reprezentacja dla zera to wszystkie bity zerowe, a znak + to zero, będzie jeszcze jedna możliwa niezerowa reprezentacja z bitem znaku ustawionym na 1.
Jest to bardzo długi sposób na powiedzenie, że uzupełnienie 2 reprezentuje wartości z zakresu - (2 ^ (N-1)) .. + (2 ^ (N-1) - 1).
Uzupełnienie 1 ma przewagę nad uzupełnieniem 2, jeśli wykonujesz obliczenia na cyfrowym przetwarzaniu sygnałów całkowitoliczbowych. Operacje uzupełniania 1 są z natury skracane do zera. Uzupełnienie 2 skraca się w kierunku-nieskończoności. Nauczyłem się tego trudnym sposobem ...