Я знаю, що це має щось спільне з доповненням 2 та додаванням 1, але я дійсно не розумію, як можна кодувати ще одне число з такою ж кількістю бітів, коли мова йде про мінусові числа.
Я знаю, що це має щось спільне з доповненням 2 та додаванням 1, але я дійсно не розумію, як можна кодувати ще одне число з такою ж кількістю бітів, коли мова йде про мінусові числа.
Відповіді:
Подумайте про це в цих умовах. Візьміть 2-розрядне число з попереднім знаком:
000 = 0
001 = 1
010 = 2
011 = 3
Тепер будемо мати деякі негативи:
111 = -1
110 = -2
101 = -3
Зачекайте, у нас теж є
100 ...
Це має бути негативним, тому що біт знаків дорівнює 1. Отже, логічно, він повинен бути -4.
(Редагувати. Як справедливо зазначає WorldEngineer , не всі системи нумерації працюють таким чином - але ті, про які ви просите.)
Тому що в цілому діапазоні не два класи чисел, а три: від’ємні числа, нуль і додатні числа. Нуль повинен зайняти слот (було б досить недоцільно, щоб не вміти представляти нуль ...), тому або позитивний, або негативний клас повинен відмовитися від місця. Справа в тому, що звичайно позитивний діапазон повинен зробити цю жертву певною мірою довільним, але на рівні бітових маніпуляцій є деякі речі, які це рішення робить зручнішим.
В основному існують три способи представлення підписаних цілих чисел у двійковій формі: 2 - доповнення, 1 - доповнення та величина знаків. (Бікінарій давно пішов шляхом птаха Додо.)
Доповнення та величина знаку 1 мають два нульові значення, +0 та -0, кожне з унікальним поданням. Доповнення 2 має лише одне нульове значення та одне подання.
Тепер поле з N бітів може кодувати 2 ^ N значення. Відніміть один з доповнення 2, і у вас є 2 ^ N-1 = 2 ^ (N-1) + 2 ^ (N-1) + 1. Оскільки подання для нуля - це всі нульові біти, а знак + - нуль, буде ще одне можливе ненульове подання з бітом знака, встановленим на 1.
Це дуже довгодушний спосіб сказати, що доповнення 2 представляє значення в діапазоні - (2 ^ (N-1)) .. + (2 ^ (N-1) - 1).
Доповнення 1 насправді має перевагу над доповненням 2, якщо ви робите цілі цифрові обчислення цифрових сигналів. Операції з доповненням 1 суттєво скорочуються до нуля. Доповнення 2 скорочується у бік нескінченності. Я навчився цього твердого шляху ...