Реализация вычитания сумматором — различия между версиями
Alex z (обсуждение | вклад) |
Alex z (обсуждение | вклад) |
||
Строка 10: | Строка 10: | ||
<math> \mathbf -y = (\lnot y) + 1 </math> | <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> | + | Например число <math> \mathbf - 19</math> будет записано как <math> \mathbf 01101 </math>, так как <math> \mathbf 19_\mathrm{10} = 10011_\mathrm{2}</math>, а <math> \mathbf (\lnot 10011) + 1 = 01100 + 1 = 01101 </math> |
Строка 50: | Строка 50: | ||
|[[Файл:Arithmometer_SUM_SUB.png|400px|Арифмометр]] | |[[Файл:Arithmometer_SUM_SUB.png|400px|Арифмометр]] | ||
|} | |} | ||
+ | |||
+ | ==См. также== | ||
+ | [[Двоичный_каскадный_сумматор|Сумматор]]<br /> | ||
+ | [[Матричный_умножитель|Матричный умножитель]]<br /> | ||
+ | [[Реализация_булевой_функции_схемой_из_функциональных_элементов|Реализация булевой функции схемой из функциональных элементов]] | ||
+ | |||
+ | ==Ссылки== | ||
+ | [http://en.wikipedia.org/wiki/Subtractor Subtractor]<br /> | ||
+ | [http://www.play-hookey.com/digital/binary_subtraction.html Negative Numbers and Binary Subtraction]<br /> | ||
+ | [http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/20-arithmetic/40-addsub/add-sub.html Рабочий пример арифмометра] |
Версия 07:36, 2 декабря 2011
Содержание
Преобразование чисел для вычитания сумматором
Что бы реализовать вычитание каскадным или двоичным каскадным сумматором, нужно сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел.
Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в дополнительном коде.
Данное число нужно инвертировать и прибавить к нему единицу.
Например число
будет записано как , так как , а
Оптимизация
Очевидно, что такой подход к вычитанию сумматором не оптимален.Что бы упростить вычисления нужно воспользоваться лишним битом переноса в сумматоре, в который посылают ноль, и послать в него единицу при вычитании и ноль при суммировании. Вместо того что бы инвертировать вычитаемое число, можно сделать XOR бита первого переноса с каждым битом вычитаемого числа.
Таким образом, можно посылать в полученный арифмометр для сложения и вычитания числа точно так же как и при сложении, только первый бит переноса будет отвечать за знак операции: 0-сложение 1-вычитание.
Пример реализация вычитания сумматором
Условные обозначения | Изображение арифмометра | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
См. также
Сумматор
Матричный умножитель
Реализация булевой функции схемой из функциональных элементов
Ссылки
Subtractor
Negative Numbers and Binary Subtraction
Рабочий пример арифмометра