Кодирование отрицательных чисел
В ЦВМ, как правило, знак числа помещается в старшем разряде и кодируется в двоичном коде: положительные числа имеют "0" , а отрицательные - "1".
Пусть сетка четырёхразрядная ХХХХ
Минимальное не представимое число 10000
Положит. Отриц. число
числа равное по мод.
мин. 0000 1000
макс. 0111 1111
Такой способ кодирования носит название прямого кода. Недостаток - наличие двух нулей: положительного и отрицательного, трудность операций над числами с разными знаками (вычитание из большего числа меньшего), необходимость кроме суммирующего и вычитающего устройства.
Обратный (инверсный или дополнительный до 1). Отрицательные числа получаются из положительных путём замены единичных разрядов на нулевые и наоборот. Особенность выполнения операций суммирования – необходимость циклического переноса. Недостатком данного вида кодирования является увеличение времени сложения и наличие двух нулей 0000 и 1111.
В настоящее время наиболее употребительным способом представления
отрицательных чисел является представление их в дополнительном коде (до 2-х для чисел меньше «1»).
Это представление основывается на ограниченности разрядной сетки.
При этом отрицательное число, равное по модулю заданному положительному, образуется путём его вычитания из минимального выходящего за данную разрядную сетку положительного числа, например,
10000
- 0101
----
1011
Действительно, движение по оси действительных чисел влево от нуля с
учётом разрядной сетки приводит к появлению максимально представимого числа.
В действительности же мы перемещаемся в область чисел от "1" до"2", точнее "2(n-1)-1".
-1 0 +1 +2
_______________________________________________________ - -1000¦-0111 -0001¦0000 0111¦1000 1111¦10000
0111
|
Правило перехода от положительных чисел к отрицательным: получить обратный код и прибавить "1" к младшему разряду. Операция вычитания заменяется на операцию сложения с дополнительным кодом вычитаемого (с обратным кодом с добавлением "1" в младший разряд).
Основные свойства дополнительного кода.
Диапазон |
-2n-÷2n-1 -1 (смещён в сторону отрицательных чисел) |
Число нулей |
Один |
Изменение знака |
Сумма инверсии всех разрядов с 1 младшего разряда |
Операция вычитания |
Заменяется сложением с вычитаемым противоположного знака |
Переполнение |
Когда оба слагаемых одинакового знака, а знак суммы отличен. |
Изменение разрядности |
Увеличение – размножением знака. Сокращение – округлением. |
1010 = -8+2=-6
Преобразование отрицательного десятичного числа в двоичное в дополнительном коде:- вычесть из десятичного значения числа десятичное значение знака. Остаток будет мантиссой. -3= -3-(-8)=5 = 1101