Запишите числовую строку
-32768 ... -1, 0, 1, 2, ... 32767
Добавьте движения вправо.Вычитание движется влево.Концептуально это хорошо, но как мы можем представить знак?
Мы можем использовать «величину знака», когда знак и значение разделены.Это сбивает с толку, потому что у нас есть две параллельные числовые линии с разными знаками.
Альтернативой "знаковой величине" является кодирование каждого числа в качестве другого числа.все цифры.Новый диапазон - от 0 до 65535 без знака. Все по-прежнему работает, верно?У вас просто есть фиксированное значение смещения, примененное ко всем числам.Добавьте ходы вправо.Вычитание движется влево.32768 можно декодировать до 0. 0 можно декодировать до -32768.
Это прекрасно работает.«Кодировка» числа - это просто добавление смещения.«Декодирование» числа просто вычитает смещение.
Вот еще одна схема кодирования.
Перенесите все отрицательные числа на другую сторону строки номера.
0,1, 2, ..., 32767, -32768, ... -1
Сложение все еще движется вправо.Взять любое число (с одним исключением).Число справа от него всегда больше.
Единственное исключение - 32767. Число справа от него - "переполнение".
Вычитание все еще перемещается влево.Взять любое число (с одним исключением).Число слева всегда меньше.Единственное исключение -32768.Число слева от него - «underflow».
Кодирование и декодирование немного сложнее.От 0 до 32767 имеют тривиальное кодирование и декодирование: ничего не делать.Числа закодированы как сами по себе.32768 - 65535, однако, являются кодировками отрицательных чисел.