Алгебраическое сложение в обратном коде

При отсутствии переполнения возможны четыре случая сочетания знаков и модулей слагаемых:

1. А > 0, В > 0, А + В < 1

Этот случай соответствует обычному сложению прямых кодов чисел. Переноса из знакового разряда не возникает. Коррекции результата не требуется.

2. А > 0, В < 0, А + В > 0

Возникает перенос из знакового разряда. Результат нуждается в коррекции путем вычитания 2 и добавления 2-n. Вес знакового разряда 20, а вес переноса из него – 21. Таким образом, игнорируя перенос из знакового разряда, вычитаем из результата 2, что соответствует первому члену корректирующего выражения. Для учета второго члена добавляем 1 к младшему разряду суммы, вес которого составляет 2-n.

3. А > 0, В < 0, А + В < 0

Переноса из знакового разряда не возникает. Результат не нуждается в коррекции.

4. А < 0, В < 0, |А + В| < 1

Истинное значение отрицательной суммы представлено в обратном коде, поэтому результат нуждается в коррекции путем вычитания 2 и добавления 2-n. Таким образом, игнорируя перенос из знакового разряда, вычитаем из результата 2, что соответствует первому члену корректирующего выражения. Для учета второго члена добавляем 1 к младшему разряду суммы, вес которого составляет 2-n.

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

Пример 2 случая. Сложить 2 числа в обратном коде А = 1310 и В = -310

А = +1101 Апр =0.1101 Аоб =0.1101

В = - 0011 Впр =1.0011 Воб = 1.1100

10.1001

+1

Соб = 0.1010 → Спр = 0.1010 → С = +1010+1010

Перенос, возникающий в знаковом разряде, циклически передается в младший разряд предварительного результата.

Пример 3 случая. Сложить 2 числа в обратном коде А = -1310 и В = +310

А = -1101 Апр =1.1101 Аоб =1.0010

В = +0011 Впр =0.0011 Воб =0 .0011

Соб =1.0101 → Спр =1.1010 → С =-1010-1010

Переноса из знакового разряда не возникает. Результат не нуждается в коррекции.

Пример 4 случая. Сложить 2 числа в обратном коде А = -510 и В = -610

А = - 0101 Апр =1.0101 Аоб =1.1010

В = - 0110 Впр =1.0110 Воб = 1.1001

11.0011

+1

Соб = 1.0100 → Спр = 1.1011 → С = -01011 →- 1310

Рассмотрим случай сложения чисел с одинаковыми знаками приводящих к переполнению разрядной сетки.

Пример с переполнением разрядной сетки.

Сложить два числа в обратном коде: 13/16 + 5/16 = 18/16

А = +0,1101 Апр =0.1101 Аоб =0.1101

В = +0,0101 Впр =0.0101 Воб =0 .0101

Соб =1.0010 → Спр =1.1101 → С = - 0,1101

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

Вывод.

Использование обратного кода в операциях алгебраического сложения/вычитания позволяет:

-использовать только действия арифметического сложения двоичных кодов;

-получать истинное значение знака результата;

-обнаруживать переполнение разрядной сетки;

-простота взаимного преобразования обратного кода в прямой и наоборот.

Недостаток. Коррекция предварительной суммы требует добавления единицы к её младшему разряду и может вызвать (в некоторых случаях) распространение переноса по всему числу, что приводит к увеличению вдвое времени суммирования. Для преодоления этого недостатка используют дополнительный код.

Дополнительный код.

Связь между числом и его изображением в дополнительном коде определяется следующим соотношением:

A при A ≥ 0 -положительное число

[A]i =

2 + А при A < 0 -отрицательное число

Из этого соотношения следует, что дополнительный код положительного числа равен самому числу.

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

Таким образом, для преобразования отрицательного двоичного числа в дополнительный код следует:

1. Преобразовать его сначала в обратный код (установив знаковый разряд в 1 и проинвертировав все остальные разряды числа) и добавить единицу к младшему разряду обратного кода.

2. Или оставить без изменения все младшие нули и одну младшую единицу, остальные разряды (кроме знакового) проинвертировать.

В случае возникновения переноса из первого после запятой разряда в знаковый разряд к числу следует прибавить еди­ницу в младший разряд.

Пример. Преобразовать числа в дополнительный код

Число Прямой код Обратный код Дополнительный код

+ 0111 Апр = 0.0111 Аоб = 0.0111 Ад = 0.0111

- 0111 Апр = 1.0111 Аоб = 1.1000 Ад = 1.1001

- 1000 Апр = 1.1000 Аоб = 1.0111 Ад = 1.1000

- 0101 Апр = 1.0101 Аоб = 1.1010 Ад = 1.1011

- 0,1011 Апр = 1.1011 Аоб = 1.0100 Ад = 1.0101


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: