Изменения

Перейти к: навигация, поиск

Реализация вычитания сумматором

2631 байт добавлено, 06:07, 29 ноября 2011
Новая страница: «==Преобразование чисел для вычитания сумматором== Что бы реализовать вычитание [[Каскадный...»
==Преобразование чисел для вычитания сумматором==
Что бы реализовать вычитание [[Каскадный сумматор|каскадным]] или [[Двоичный каскадный сумматор|двоичным каскадным сумматором]], нужно сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел.

<math> \mathbf x - y = x +(-y)</math>


Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код#Дополнительный код|дополнительном коде]].<br/>
Данное число нужно инвертировать и прибавить к нему единицу.

<math> \mathbf -y = (\lnot y) + 1 </math>

Например число <math> \mathbf - 19</math> будет записано как <math> \mathbf 01101 </math>, так как <math> \mathbf 19_\mathrm{10} = 10011_\mathrm{2}</math>, а <math> (\lnot 10011) + 1 = 01100 + 1 = 01101 </math>


==Оптимизация==
Очевидно, что такой подход к вычитанию сумматором не оптимален.Что бы упростить вычисления нужно воспользоваться лишним битом переноса в сумматоре, в который посылают ноль, и послать в него единицу при вычитании и ноль при суммировании. Вместо того что бы инвертировать вычитаемое число, можно сделать XOR бита первого переноса с каждым битом вычитаемого числа.<br />Таким образом, можно посылать в полученный ''арифмометр для сложения и вычитания'' числа точно так же как и при сложении, только первый бит переноса будет отвечать за знак операции: 0-сложение 1-вычитание.

<!-- Узнаю как загружать изображения, добавлю наглядную схему. -->
Анонимный участник

Навигация