Информатика и технология программирования


Представление отрицательных чиселДополнительный код


Форма представления целых со знаком выбрана таким образом, чтобы заменить отрицательные числа положительными, но из другого диапазона. Тогда числа со знаком превращаются в беззнаковые и для работы с ними можно использовать часть команд для формы представления целых без знака. Интересно, что такой "фокус" могут быть произведен в любой системе счисления. Продемонстрируем его для начала в десятичной.

Пусть имеется 3-разрядное десятичное число со знаком. Представим его в следующем виде:



-добавим слева еще одну цифру -знак числа, принимающую всего два значения: 0 -плюс, 1 -минус;



-положительные числа представляются обычным образом;



-каждая цифра отрицательного числа заменяется на дополнение ее до n-1, где n -основание системы счисления. Для десятичной системы -это дополнение до 9, то есть цифра, которая в сумме с исходной дает 9;



-к полученному числу добавляется 1.

Такое представление отрицательных чисел называется дополнительным кодом. Он обладает одним замечательным свойством: сложение чисел в дополнительном коде по правилам сложения целых без знака дает корректный результат, который также получается в дополнительном коде. Убедимся в этом:

.


- 3 8 6 - отрицательное число
1 6 1 3 - дополнение каждой цифры до 9
1 6 1 4 - добавление 1
___________________________________________
512 - 386 =
0 5 1 2
+ 1 6 1 4
_______
2 1 2 6 - для знака используется 0 или 1
0 1 2 6 (переполнение)
___________________________________________
119 - 386 =
0 1 1 9
+ 1 6 1 4
_______
1 7 3 3 - результат в дополнительном коде
- 2 6 6 - дополнение каждой цифры до 9
- 2 6 7 - добавление 1

Если внимательно присмотреться, то дополнение каждой цифры до 9 имеет некоторую аналогию с вычитанием. Но как бы там ни было, получаем следующий результат: вычитание или же сложение чисел со знаком заменяется операцией сложения, выполненной для беззнаковых чисел.

В двоичной системе счисления дополнение каждой цифры выглядит как инвертирование двоичного разряда, то есть замена 0 на 1 и наоборот.


Начало  Назад  Вперед