Вычитание модулей двоично-десятичных чисел
По аналогии с операциями вычитания в двоичном коде операцию X-Y можно представить как X + (-Y). При этом отрицательное число представляется в дополнительном коде, аналогичном дополнительному коду в двоичной арифметике. Этот код используется только для выполнения операций вычитания. Хранятся двоично-десятичные числа (как положительные, так и отрицательные) в прямом коде со знаком.
Алгоритм выполнения операции состоит в следующем:
1. Модуль положительного числа представляется в прямом двоично-десятичном коде (8421).
Модуль отрицательного числа – в дополнительном коде (ДК) с избытком 6.
Для получения ДК необходимо:
- инвертировать значения разрядов всех тетрад числа;
- к младшему разряду младшей тетрады прибавить 1.
Таким образом, цепочка ПК (mod) ® ОК ® ОК+1 ® ДК аналогична цепочке в двоичной арифметике. Только здесь получается ДК с избытком 6, так как дополнение идет не до 10, а до 16.
2. Произвести сложение операндов (X) в ПК и (Y) в ДК.
3. Если при сложении тетрад возник перенос из старшей тетрады, то он отбрасывается, а результату присваивается знак "+", т.е. результат получается в прямом избыточном коде. Он корректируется по тем же правилам, что и при сложении модулей.
4. Если при сложении тетрад не возникает переноса из старшей тетрады, то результату присваивается знак "-", т.е. результат получается в избыточном ДК. В этом случае необходимо перейти к избыточному ПК (т.е. инвертировать все двоичные разряды двоично-десятичного числа и прибавить к младшему разряду 1).
5. Полученный в этом случае результат в ПК корректируется. Для этого к тем тетрадам, из которых возникал перенос при выполнении пункта 2 (при суммировании), необходимо добавить 10(10) или 1010(2). Возникшие при этом межтетрадные переносы не учитываются. Таким образом, корректировка происходит в тех тетрадах, которые в положительных числах не корректируются. Следует отметить, что при выполнении операции вычитания большего числа из меньшего (X - Y = Z, при |X|£|Y|), т.е.
при Z£ 0 алгоритм коррекции результата после перевода Z из ДК в ПК требует уточнения. А именно, после перевода Z в ПК необходимость коррекции определяется не только приведенными правилами, но и следующими требованиями:
а) нулевой результат не корректируется;
б) значащие нули справа в результате не корректируются;
в) если Z¹0 и в нем отсутствуют значащие нули справа (т.е. пп. а, б не имеют места), необходимо анализировать Y. Если в Y есть значащие нули справа, то соответствующие им разряды (тетрады) Z требуют обязательной коррекции, независимо от наличия переносов при сложении XПК
и YДК.
Пример.
Z=X-Y=49(10) -238(10)
=-189(10).
Представим |Y| в ДК с избытком 6:
Выполним сложение:
Отсутствие переноса из старшей тетрады является признаком того, что результат получился в ДК (т.е. отрицательный).
Перейдем к нескорректированному избыточному ПК:
Произведем коррекцию результата в соответствии с п. 5 алгоритма:
Поскольку ранее результат получался в ДК, т.е. отрицательный, необходимо добавить знак (-). Окончательный результат будет следующий:
Z= -(0001 1000 1001) = -189(10)
Пример.
Z=X-Y=143(10) -58(10)
=85(10).
Представим |Y| в ДК с избытком 6:
Выполним сложение:
Наличие переноса из старшей тетрады указывает на то, что результат получился в ПК (т.е. положительный).
Произведем коррекцию результата в соответствии с п. 3 алгоритма: