
- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
При преобразовании необходимо учитывать свойства кодов (раздел 3.2), из которых следует:
При преобразовании знак числа может измениться в единственном случае, когда выполняется преобразование прямого кода отрицательного нуля в дополнительный код (вариант кода B или C), т.к. в этих вариантах ноль может быть записан только как (+0).
Дополнительный код 1|00...0 в варианте кода A кодирует -0. При преобразовании в прямой код он не должен измениться.
Дополнительный код 1|00...0 в варианте кода B не может быть преобразован в прямой код без расширения формата прямого кода в любой системе счисления. Если исходный дополнительный код 1|00...0 и длина формата должна оставаться прежней, формируют признак исключительной ситуации переполнения формата. Выполнение программы вычислений прерывают.
Если код 1|00...0 не применяется при представлении числа в дополнительном коде (вариант кода C), то операция преобразования этого кода в прямой код невыполнимая. В этой исключительной ситуации формируют признак невыполнимая операция и выполнение программы прерывают.
Все способы преобразований кодов отрицательных чисел можно разделить на три группы:
Преобразование прямого кода в обратный код и последующее преобразование обратного кода в дополнительный.
Преобразование дополнительного кода в обратный код и последующее преобразование обратного кода в прямой.
Непосредственное преобразование прямого кода в дополнительный и дополнительного – в прямой.
Способы групп 1 и 2 очевидны, и их множества образованы комбинациями способов промежуточных преобразований. Кроме того, существуют модификации этих способов удобные в некоторых применениях. Модифицированные варианты преобразований отличаются способом вычисления значащих разрядов результата.
В двоичной системе счисления младшие биты прямого и дополнительного кода числа всегда совпадают. Очевидно, что при любом варианте взаимного преобразования младший бит исходного кода можно копировать в младший бит результата. А как быть с остальными?
Можно положить в основу модифицированного способа преобразования любой вариант преобразования обратного кода в дополнительный или дополнительного кода в обратный. Учитывая возможность копирования младшего бита исходного кода, выполнить доработку базового варианта для определения правила вычисления остальных бит результата. Рассмотрим эту возможность на примере.
Возьмем за основу способ взаимного преобразования обратного и дополнительного двоичного кода (варианты кода A или C) отрицательного числа, прибавлением 1 к младшему биту обратного кода (пример 3-8).
П
ример
3-10. В вариантах
A-F
выполнено преобразование прямого кода
двоичных отрицательных чисел в
дополнительный код. В вариантах G-
M
выполнено преобразование дополнительного
кода двоичных отрицательных чисел в
прямой код.
В вариантах A,
C,
E
выполнено преобразование прямого кода
в обратный код и затем преобразование
обратного кода в дополнительный выбранным
способом. Значения младшего разряда
результата и исходного кода совпадают,
так как прибавление 1 приводит к повторному
инвертированию младшего разряда, а
перенос в следующий разряд равен 1, если
младший разряд исходного кода равен 0.
В вариантах B,
D,
F
это учтено. Младший разряд копируется
в результат, а для получения остальных
значащих разрядов
к инверсии обратного кода этих разрядов
прибавляется инверсия младшего разряда
.
При модифицированном способе вычисления значащих разрядов дополнительного кода знак результата можно вычислять по правилам определения знака при преобразовании обратного кода в дополнительный (раздел 3.2.1.2), так как знак обратного кода совпадает со знаком прямого кода.
В вариантах G-M
выполнено преобразование
в
.
При взаимном преобразовании прямого и дополнительного кода числа с любым знаком, в основу которого положен рассмотренный способ модифицированного преобразования кодов отрицательных чисел, можно младший разряд исходного кода копировать в младший разряд результата и прибавлять конъюнкцию разряда знака и инверсии младшего разряда числа к обратному коду остальных разрядов числа.
Модифицированный способ имеет преимущества перед базовым способом состоящие в сокращении длины пробега переноса и в упрощении вычисления младшего разряда результата. Кроме того, если младший разряд исходного кода 1 (варианты D, K, L примера 3-10), в результат можно копировать младший разряд и инверсию остальных значащих разрядов и тем самым исключить выполнение операции сложения. Если принять, что значения младших разрядов и знаков в исходных кодах равновероятны, то в среднем операция сложения будет выполняться только при каждом четвертом преобразовании.
Замечание. Любой способ преобразования прямого двоичного кода в дополнительный позволяет преобразовывать дополнительный двоичный код в прямой код правильно. Обратное утверждение не во всех случаях верно. Ошибка может возникать в знаковом разряде при преобразовании прямого кода (–0) в дополнительный. Чтобы исключить такую ошибку, достаточно уточнить правило вычисления знака результата.
Предлагаю читателю, сконструировать модифицированный вариант преобразования двоичного дополнительного кода вариант B в прямой код и наоборот, положив в основу преобразование дополнительного кода в обратный код, использованное в примере 3-7. Учтите, что правило определения знака результата, придется изменить.
Возникает вопрос:
можно ли конструировать модифицированные
правила преобразования для систем
счисления с основанием
.
Ответ на этот вопрос: да, можно.
Рассмотрим процесс поиска модифицированного способа преобразования на примере.
Возьмем за основу способ преобразования обратного десятичного кода в дополнительный код, прибавлением 1 к младшему биту обратного кода (пример 3-8 варианты A, B, C).
П
ример
3-11. В вариантах
A-F
выполнено преобразование прямого кода
десятичных отрицательных чисел в
дополнительный код. В вариантах G-M
выполнено преобразование дополнительного
кода десятичных отрицательных чисел в
прямой код.
В вариантах A, C, E выполнено преобразование прямого кода в обратный код и затем преобразование обратного в дополнительный код выбранным способом.
Значение младшего
разряда результата в вариантах A,
C,
E
дополняет младший разряд исходного
кода до
в результате прибавления 1 к дополнению
младшего разряда исходного кода до
.
Это позволяет вычислять младший разряд
по таблице подобной применяемой при
вычислении обратной цифры и отличающейся
лишь значением результата.
В вариантах B, D, F это учтено.
При сложении младшего разряда обратного кода с 1 перенос в следующий разряд равен 1, только если младший разряд исходного прямого кода равен 0. Поэтому для получения остальных значащих разрядов при младшем разряде не равном 0 достаточно прибавить к обратному коду 0 или взять обратный код этих разрядов в вместе со знаком, как это сделано в вариантах B и D. Если в младшем разряде исходного кода 0, то обратный код остальных разрядов исходного кода необходимо увеличить на 1, как это сделано в варианте F, и определить знак результата по правилам базового способа преобразования с учетом способа представления отрицательного нуля в выбранном варианте дополнительного кода (раздел 3-2).
В вариантах G-M сконструированный способ преобразования прямого кода десятичного числа в дополнительный код применен для обратного преобразования.
Прибавление 1 при
преобразовании десятичных кодов будет
выполняться гораздо реже, чем при
преобразовании двоичных чисел, так как
вероятность нуля в младшем разряде
десятичного кода 0,1, а в двоичном коде
0,5. При
вероятность нуля в младшем разряде
составит
1:16 = 0,0625. Из этого следует
возможность ускорить преобразование
двоичных кодов, интерпретируя их как
двоично-шестнадцатеричные. Конструирование
способов ускоренного преобразования
двоичных кодов при таком подходе
предоставим читателю.
Правила непосредственного взаимного преобразования прямого и дополнительного кодов отрицательных чисел.
При преобразовании кода значащих разрядов не равного 0 следует
– цепочку нулей в младших разрядах копировать в результат;
– цифру не равную 0, у которой справа только нули6, – заменять ее дополнением до ;
– цифры, у которых справа есть хотя бы одна цифра не равная нулю, – заменять обратными:
– код знака числа сохранить.
Если все значащие цифры исходного кода равны 0, то результат преобразования зависит от выбранного варианта представления числа в дополнительном коде (раздел 3-2) и от направления преобразования.
При взаимном преобразовании прямого кода и дополнительного (вариант A) исходный код 1|00…0 (-0) совпадает с кодом результата.
При преобразовании прямого кода 1|00…0 в дополнительный код (варианты кода B и C) достаточно заменить код знака.
Преобразование дополнительного кода (вариант кода C) в прямой код при исходном коде 1|00…0 должно вызывать исключительную ситуацию невыполнимая операция и прерывание выполняемой программы.
Преобразование дополнительного кода (вариант кода B) в прямой код при исходном коде 1|00…0 должно вызывать исключительную ситуацию переполнение разрядной сетки и прерывание выполняемой программы, если форматы кодов совпадают. Чтобы исключить ситуацию переполнения и получать правильное значение прямого кода достаточно в его дополнительный старший значащий разряд записывать 1, если исходный код 1|00…0, иначе записывать 0.
Преобразуйте самостоятельно прямой десятичный код 1|20500 в дополнительный и дополнительный десятичный код 1|79500 в прямой. Результаты должны совпасть.
При непосредственном преобразовании многоразрядного двоичного кода его можно интерпретировать как двоично-шестнадцатеричный или двоично-восьмеричный для сокращения цепочки нулей и ускорения преобразования.
Преимущество непосредственного способа преобразования является выполнение преобразования за один шаг (без промежуточного представления числа в обратном коде). Оно особенно ярко проявляется при параллельном (одновременном) преобразовании цифр и знака. При этом достигается максимальная скорость преобразования.
У читателя может возникнуть вопрос: зачем нужно знать множество способов определения результата преобразования. При конструировании многофункциональной системы в зависимости от сочетания выполняемых ею операций квалифицированный конструктор выбирает способ, позволяющий максимально экономить затраты оборудования и/или времени на вычисления. Знание только одного способа исключает возможность выбора лучшего в данных конкретных условиях. Поэтому конструктор должен не только знать множество способов преобразования, а и уметь их конструировать.