- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Вычитание двоично-десятичных чисел
Правила вычитания десятичных цифр в двоично-десятичных кодах можно получить по аналогии с тем, как это сделано для сложения. Поэтому в этом разделе рассмотрим только базовые правила, и не будем вдаваться в подробности вычислений в каждом варианте кодирования цифр, предоставив эту возможность читателю.
Пусть X
и Y
цифры десятичного алфавита. Тогда
разность цифр с учетом займа
из предыдущего разряда является
десятичным числом вида
,
где
– заем из последующего разряда, имеющий
вес 1010;
Z
– цифра в разряде разности с весом 1.
Справедливо отношение
. (4-55)
Пусть при кодировании цифр X, Y и Z им приводятся в соответствие числа x, y и z в двоичной системе счисления так, что удовлетворяется равенство количественных эквивалентов (4-39), (4-40) и (4-41).
Подставив значения X,Y и Z из (4-39) – (4-41) в выражение (4-55) найдем
. (4-56)
Следовательно,
для вычисления кода z
десятичной цифры разности Z
достаточно выполнить вычитание кодов
цифр
с учетом займа U
и, если заем из последующего десятичного
разряда
,
прибавить к разности константу
иначе прибавить константу b.
Разумеется, что вычисления должны
выполняться в двоичной системе счисления
и для этого константы должны быть
представлены в этой же систем счисления.
Из (4-55) следует,
что
,
если
.
Подставив в неравенство значения X
и Y
из (4-39) и (4-40) получим
.
Следовательно:
(4-57)
и
не зависит от смещения b.
Заем
при любом рассматриваемом способе
кодирования десятичных цифр равен
значению займа вычисляемого при вычитании
старших разрядов кодов цифр.
Рассмотрим
выполнение операции вычитания десятичных
цифр представленных в коде 8421. При
выражение (4-56) примет вид
. (4-58)
Пример 82. Десятичные цифры представлены в коде 8421.
В
вариантах A,B
результат вычитания
,
поскольку заем, показанный жирным
шрифтом, равен 0. Следовательно,
и остальные 4 разряда кода разности
являются искомым кодом z
цифры Z.
В вариантах C-E
при вычитании образуется заем равный
1. Следовательно, результат вычитания
меньше нуля. Поэтому
и, следовательно, необходимо к полученной
разности прибавить константу 10102
для вычисления кода z
цифры Z.
Поскольку код z
содержит только 4 разряда, то перенос/заем
из старшего разряда отбрасывается и не
вычисляется.
В варианте D учтено, что младший разряд константы равен 0, и поэтому нет необходимости выполнять сложение в младшем разряде.
В варианте E операция сложения с константой 10102 заменена операцией вычитания дополнения константы 10102 до 16, равного 1102, причем учтено, что младший разряд кода 1102 равен 0, и вычитание младшего разряда константы можно не выполнять.
В варианте F
выполнено вычитание двухразрядных
чисел
.
При вычитании младшей тетрады заем из
следующей тетрады
.
Поэтому для получения кода z
цифры младшего разряда выполняется
вычитание константы 1102.
При вычитании следующей тетрады заем
из очередной тетрады
.
Поэтому вычитание константы не выполняется
за ненадобностью.
При вычитании
десятичных цифр в коде 8421+6 или 8421+3 для
получения кода z
следует к коду
прибавить константу b
или
в зависимости от значения займа
(4-56). Разумеется, что можно сложение кода
с любой из констант заменить вычитанием
из него дополнения константы до 16. Из
этого следует множество вариантов
выполнения операции вычитания.
Пример 83. Десятичные цифры представлены в коде 8421+6.
В
вариантах A,B
результат вычитания
,
поскольку заем, показанный жирным
шрифтом, равен 0. Следовательно,
и в соответствии с (4-56) введена
корректирующая поправка
для получения кода z
цифры Z.
В вариантах C-E
при вычитании образуется заем равный
1. Следовательно, результат вычитания
меньше нуля. Поэтому
,
и необходимо к полученной разности
прибавить константу
для вычисления кода z
цифры Z.
Поскольку код z
содержит только 4 разряда, то достаточно
прибавить код 0000 или не вводить поправку.
В варианте F
выполнено вычитание двухразрядных
чисел (
).
При вычитании младшей тетрады заем из
следующей тетрады
.
При вычитании следующей тетрады заем
из очередной тетрады
.
Поэтому вводится корректирующая поправка
1102.
Пример 84. Десятичные цифры представлены в коде 8421+3.
В
вариантах A,
B
результат вычитания
,
поскольку заем, показанный жирным
шрифтом, равен 0. Следовательно,
и в соответствии с (4-56) введена
корректирующая поправка
для получения кода z
цифры Z.
В вариантах C-E
при вычитании образуется заем равный
1. Следовательно, результат вычитания
меньше нуля. Поэтому
,
и необходимо к полученной разности
прибавить константу
для вычисления кода z
цифры Z.
В варианте E сложение с константой 11012 заменено вычитанием ее дополнения до 16 равного 112.
В варианте F
выполнено вычитание двухразрядных
чисел (
).
При вычитании младшей тетрады заем из
следующей тетрады
и поэтому выполнено вычитание константы
112
как в варианте D.
При вычитании следующей тетрады заем
из очередной тетрады
.
Поэтому добавлена корректирующая
поправка 112
как в вариантах A
и D.
Сопоставление
способов вычитания и сложения (раздел
4.7.4) показывает, что вычитание в кодах
8421 и 8421+6 выполняется существенно проще,
чем сложение. Заем в очередную тетраду
вычисляется до введения корректирующей
поправки, что ускоряет выполнение
операции вычитания многоразрядных
десятичных чисел. Кроме того, вычисление
кодов
выполняется фактически по правилу
вычитания многоразрядных двоичных
чисел, что позволяет достаточно просто
перенастраивать систему, выполняющую
вычитание десятичных чисел, на вычитание
двоичных чисел. Для этого достаточно
запретить системе, вводить корректирующие
поправки в тетрадах или заменить их
кодами 0.
В коде 8421+3, так же как в кодах 8421 и 8421+6, вычисление выполняется по правилу вычитания многоразрядных двоичных чисел, что позволяет перенастраивать систему на вычитание двоичных чисел.
Обратите внимание на тот факт, что различие действий, выполняемых при сложении и вычитании в коде 8421+3, может состоять лишь в замене операций, выполняемых над исходными кодами и константами, на обратные. Значения констант при этом сохраняются (сравните вариант A примера 4-81 с вариантом F примера 84).
