Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0527359_F6695_razrabotka_programm_preobrazovani...doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
229.38 Кб
Скачать

1.2 Операции двоично-десятичной арифметики

Операции двоично-десятичной арифметики выполняются в два этапа: собственно операция и коррекция.

Необходимость коррекции объясняется упомянутыми выше запрещенными комбинациями. Они возникают в результате сложения в связи использованием лишь 10 возможных комбинаций из 16. Поэтому правила операций в двоично-десятичной системе таковы:

- при сложении двоично-десятичных чисел каждый раз, когда происходит перенос бита в старший полубайт, необходимо к полубайту, от которого произошёл перенос, добавить корректирующее значение 0110;

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

- при вычитании двоично-десятичных чисел для каждого полубайта, получившего заём из старшего полубайта, необходимо провести коррекцию, отняв значение 0110.

Пример сложения десятичных чисел 3927 и 4856:

В двоично-десятичной форме эти числа будут выглядеть: 3927 = 0011 1001 0010 0111, а 4856 = 0100 1000 0101 0110

Складываем числа по правилам двоичной арифметики:

* **

0011 1001 0010 0111

+ 0100 1000 0101 0110

___________________

= 1000 0001 0111 1101 - Двоичная сумма

+ 0110 0110 - Коррекция

___________________

1000 0111 1000 0011

* — тетрада, из которой был перенос в старшую тетраду

** — тетрада с запрещённой комбинацией битов

Коррекция в обоих случаях состоит в добавлении 6, а причины коррекции таковы:

1) в тетраду, помеченную символом *, добавляем 6, т.к. по правилам двоичной арифметики перенос унёс с coбой 16, а по правилам десятичной арифметики должен был унести 10;

2) в тетраду, помеченную символом **, добавляем 6 и разрешаем распространение переноса, т.к. комбинация битов 1101 (соответствующая десятичному числу 13) является запрещённой.

Вычитание двоичных чисел может производиться в прямом коде (с созданием заема из старшего разряда), в обратном коде (необходимо учитывать циклический перенос из знакового разряда в младший разряд результата) и в дополнительном коде. В ЭВМ наиболее часто используется дополнительный код.

Рассмотрим пример вычитания с заемом для десятичных чисел: 5648 - 2739 = 2909.

564810 = 0101 0110 0100 1000BCD

273910 = 0010 0111 0011 1001BCD

% 1010 % 1010

0101 0110 0100 1000

- 0010 0111 0011 1001

======================

0010 1001 0000 1001 BCD

2 9 0 910

Знаком % отмечен разряд, из которого берется заем в младший (в размере 1010 = 10102). Получен результат 0010 1001 0000 1001 в двоично-десятичной системе, что соответствует 2909 в десятичной.

Те же операции в дополнительном коде будут выполнены так:

а) получаем дополнительный код для вычитаемого путем обращения разрядов и прибавления 1:

____ ____ ____ ____

0010 0111 0011 1001 = 1101 1000 1100 0110

+ 1

======================

1101 1000 1100 0111 BCD

б) складываем первое число и дополнительный код второго:

0101 0110 0100 1000

+ 1101 1000 1100 0111

======================

1 0010 1111 0000 1111

* ** * **

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

в) проводим коррекцию запрещенных тетрад вычитанием 6:

0010 1111 0000 1111

- 0110 0110

====================

0010 1001 0000 1001BCD

2 9 0 910