Сложение и вычитание двоично-десятичных чисел
Операция сложения производится только над модулями двоично-десятичных чисел; знак результата определяется отдельно в результате анализа знаков слагаемых. Сложение модулей десятичных чисел, имеющих одинаковые знаки, производится по следующим правилам: 1. Одно из слагаемых представляется в коде с избытком 6 (таблица 2.3), другое – в коде 8-4-2-1 2. Сложение двоично-десятичных модулей выполняется по правилам двоичной арифметики. 3. Если при сложении тетрад получается результат больше 10, то автоматически вырабатывается перенос в следующую тетраду. В этом случае результат в данной тетраде получается в естественном двоично-десятичном коде 8-4-2-1 и коррекция для этой тетрады не требуется. 4. Если при сложении в каких – либо тетрадах переносы отсутствуют, то для получения истинного результата из кодов этих тетрад необходимо вычесть избытки 6 (сложить дополнение до 16, т.е. 1010).
Пример 1. Сложить А = 3610 и B = 5810. Представим модули чисел А в прямом коде, B – в коде с избытком 6. А = 0011 *0110 Отмеченные "*" тетрады имеют перенос Bизб = +1011 1110 Код с избытком 6 1111 0100 1010 Коррекция результата по тетрадам Перенос теряется 1 1001 0100 Сумма 9410
Сложение модулей десятичных чисел, имеющих разные знаки, производится по следующим правилам: 1. Модуль положительного числа представляется в прямом коде 8-4-2-1; модуль отрицательного числа – в дополнительном коде с избытком 6. Для получения дополнения отрицательного числа от модуля надо инвертировать значения разрядов всех его тетрад и к младшему разряду последней (младшей) тетрады прибавить единицу. Дополнительный код от модуля двоично-десятичного числа берется не десятичный, а двоичный, представляющий собой дополнительный код с избытком 6(тетрады дополняются до 16, а не до 10). 2. Сложение двоично-десятичных модулей выполняется по правилам двоичной арифметики. 3.Если при сложении тетрад получается результат больше 10, то автоматически вырабатывается перенос в следующую тетраду. Если возникает перенос из старшей тетрады, то он теряется, а результату присваивается знак плюс, т.е. результат получается в прямом избыточном коде Для получения истинного результата необходимо вычесть избытки 6 (сложить дополнение до 16, т.е. 1010) в тех тетрадах, где перенос отсутствовал. 4.Если при сложении тетрад (п.2.) перенос из старшей тетрады отсутствует, то результату присваивается знак минус, т.е. результат получается в дополнительном избыточном коде. Для получения истинного результата необходимо инвертировать каждый разряд и к младшему разряду прибавить единицу. После чего провести коррекцию (прибавить дополнение 1010) полученного кода по всем тетрадам.
Пример 2. Даны два числа: А = 35710 и B = 19610. Запишем данные числа в прямом, обратном и дополнительном двоично-десятичном кодах: Апр = 0011 0101 0111 Впр = 0001 1001 0110 Аобр= 1100 1010 1000 Вобр = 1110 0110 1001 рАдоп= 1100 1010 1001 Вдоп = 1110 0110 1010 Пример 3. Вычтем из числа А = 35710 число B = 19610, для чего сложим Апр и Вдоп : Апр = 0011 0101 0111 Вдоп = 1110 0110 1010 Апр +Вдоп = *0001 1100 *0001(Отмеченные "*" тетрады имеют перенос) 1010 (проведем коррекцию результата) А-В= 0001 0110 0001 А-В= + 110 610 110
Пример 4.Вычтем из числа B = 19610 число А = 35710 , для чего сложим Впр и Адоп : Впр = 0001 1001 0110 Адоп = 1100 1010 1001 Впр+Адоп = 1110 *0011 1111 (Отмеченные "*" тетрады имеют перенос) (А+В) обр = 0001 1100 0000 (инвертируем каждый разряд) 1010 (проведем коррекцию результата В-А= 0001 0110 0001 и добавим в младший разряд 1) В-А= - 110 610 110
Переполнение разрядной сетки возможно при сложении операндов с одинаковыми знаками. Оно может быть определено по наличию переноса из старшей тетрады. При выполнении операции вычитания меняется знак второго операнда, после чего действия над числами производится так же, как и при сложении.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|