Реализация вычитания сумматором — различия между версиями
Alex z (обсуждение | вклад) |
Alex z (обсуждение | вклад) |
||
Строка 17: | Строка 17: | ||
==Пример реализация вычитания сумматором== | ==Пример реализация вычитания сумматором== | ||
− | + | {| | |
+ | |- | ||
+ | !Условные обозначения | ||
+ | !Изображение арифмометра | ||
+ | |- | ||
+ | | | ||
{| border="1" | {| border="1" | ||
![[Файл:XOR_logic_element.png|100px|XOR]] | ![[Файл:XOR_logic_element.png|100px|XOR]] | ||
Строка 36: | Строка 41: | ||
|- | |- | ||
!<math> \mathbf {\color{Blue}T} </math> | !<math> \mathbf {\color{Blue}T} </math> | ||
− | |бит отвечающий за знак операции | + | |бит отвечающий за знак операции<br />'''T''' подключён к '''C<small>0</small>''' 0-вому биту переноса в сумматоре |
!0 если <math> \mathbf S = A + B</math><br />1 если <math> \mathbf S = A - B</math><br /> | !0 если <math> \mathbf S = A + B</math><br />1 если <math> \mathbf S = A - B</math><br /> | ||
|- | |- | ||
!<math> \mathbf {\color{OliveGreen}0 , 1 ... N} </math> | !<math> \mathbf {\color{OliveGreen}0 , 1 ... N} </math> | ||
|[[Сумматор|блоки]] [[Каскадный сумматор|каскадного]] или [[Двоичный каскадный сумматор|двоичного каскадного]] сумматора | |[[Сумматор|блоки]] [[Каскадный сумматор|каскадного]] или [[Двоичный каскадный сумматор|двоичного каскадного]] сумматора | ||
− | + | | | |
+ | |} | ||
+ | |[[Файл:Arithmometer_SUM_SUB.png|400px|Арифмометр]] | ||
|} | |} | ||
− | |||
− |
Версия 04:44, 2 декабря 2011
Преобразование чисел для вычитания сумматором
Что бы реализовать вычитание каскадным или двоичным каскадным сумматором, нужно сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел.
Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в дополнительном коде.
Данное число нужно инвертировать и прибавить к нему единицу.
Например число
будет записано как , так как , а
Оптимизация
Очевидно, что такой подход к вычитанию сумматором не оптимален.Что бы упростить вычисления нужно воспользоваться лишним битом переноса в сумматоре, в который посылают ноль, и послать в него единицу при вычитании и ноль при суммировании. Вместо того что бы инвертировать вычитаемое число, можно сделать XOR бита первого переноса с каждым битом вычитаемого числа.
Таким образом, можно посылать в полученный арифмометр для сложения и вычитания числа точно так же как и при сложении, только первый бит переноса будет отвечать за знак операции: 0-сложение 1-вычитание.
Пример реализация вычитания сумматором
Условные обозначения | Изображение арифмометра | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|