Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_основы_МПТрус.doc
Скачиваний:
27
Добавлен:
27.05.2015
Размер:
1.07 Mб
Скачать

2.3 Двоичная арифметика.

Правила арифметики во всех позиционных системах аналогичны, и в двоичной позиционной системе счисления выполнение арифметических действий над двоичными числами задается с помощью таблиц двоичного сложения, вычитания и умножения. Основной операцией, которая используется в цифровых устройствах при выполнении различных арифметических действий, является операция алгебраического сложения чисел, т. е. сложения, в котором могут участвовать как положительные, так и отрицательные числа. Вычитание легко сводится к сложению путем изменения на обратный знак вычитаемого, а операции умножения и деления также сводятся к алгебраическому сложению и некоторым логическим действиям.

Сложение двух чисел в двоичной системе счисления выполняется на основе таблицы двоичного сложения:

0 + 0 = 0,

0 + 1 = 1,

1 + 0 = 1,

1 + 1 = 10.

Двузначная сумма в последнем случае означает, что при сложении двух двоичных цифр, равных 1, в каком-либо разряде двоичного числа возникает перенос в соседний старший разряд. Этот перенос должен быть прибавлен к сумме цифр, образовавшейся в соседнем разряде.

При сложении двух многоразрядных двоичных чисел цифры разрядов суммы формируются последовательно, начиная с младшего разряда. Цифра младшего разряда суммы образуется суммированием цифр младших разрядов слагаемых. При этом кроме цифры разряда суммы формируется цифра переноса в следующий, более старший разряд, если оба младших разряда единицы. Таким образом, в разрядах, начиная со второго, могут суммироваться три цифры: цифры соответствующего разряда слагаемых и перенос, поступающий в данный разряд из предыдущего. Пример сложения двух многоразрядных двоичных чисел:

1 1 0 1 1 0 1 — первое слагаемое

+

1 0 0 1 1 1 1 — второе слагаемое

0 1 0 0 0 1 0 — поразрядная сумма без учета переносов

+

1 1 1 1 — переносы

10 1 1 1 1 0 0 — окончательная сумма

Непосредственно под двумя слагаемыми записан результат поразрядного сложения без учета переноса. В тех разрядах, в которых оба слагаемых равны единице, поразрядная сумма равна 0. В этих разрядах образовался перенос в соседний старший разряд, который отмечен в следующей строке. В результате сложения строки поразрядных сумм со строкою переносов получается окончательная сумма. При сложении поразрядной суммы с переносами удобно пользоваться следующим правилом: если в результате поразрядного суммирования образовалась группа единиц, расположенных рядом, и в младший разряд этой группы поступает перенос 1, то он переводит все единицы этой группы в нули, а ближайший за рядом единиц 0 — в 1. Это правило можно использовать при сложении следующих чисел:

1 0 1 1 0 1 0 0 1 — первое слагаемое

+

1 1 0 0 1 1 1 1 1 — второе слагаемое

0 1 1 1 1 0 1 1 0 — поразрядная сумма

+

1 1 1 — переносы

1 1 0 0 0 0 1 0 0 0 — окончательная сумма

Использование этого правила позволяет ускорить формирование окончательной суммы.

Вычитание двух чисел в двоичной системе выполняется на основе таблицы двоичного вычитания:

0 — 0 = 0,

1 — 0 = 1,

1 — 1 = 0,

10—1 = 1.

Если при поразрядном вычитании приходится вычитать из нуля в уменьшаемом единицу в вычитаемом, то делается заем в соседнем старшем разряде, т. е. единица старшего разряда представляется как две единицы данного разряда. Вычитание в этом случае выполняется в соответствии с таблицей. Если в соседнем разряде или в нескольких старших разрядах стоят нули, то заем делается в ближайшем старшем разряде, в котором стоит единица. Эта единица представляется в виде суммы числа, состоящего из единицы во всех промежуточных разрядах, в которых находились нули, и двух единиц в данном разряде. Далее производится поразрядное вычитание в соответствии с таблицей. Естественно, что необходимости в дополнительном заеме во всех промежуточных разрядах появиться не может. Например, при вычитании чисел

1 1 1 0 0 0 1 1 — уменьшаемое

__1 1 0 1 1 (11) 1 1 — уменьшаемое с учетом заема

1 0 0 1 0 1 1 0 — вычитаемое

0 1 0 0 1 1 0 1 — разность

В цифровой технике операция вычитания с использованием заема практически не применяется (за исключением отдельных устройств) и реализуется как алгебраическое сложение с применением специальных кодов для представления отрицательных чисел. При этом операция вычитания сводится к операции простого арифметического сложения при помощи обратного и дополнительного кодов, используемых для представления отрицательных чисел.

Обратный код отрицательных двоичных чисел может быть сформирован по следующему правилу: цифры всех разрядов, кроме знакового, заменяются на обратные (инвертируются) — единицы заменяются нулями, а нули единицами. В знаковый разряд ставится единица Обратное преобразование из обратного кода в прямой производится по тому же правилу. При использовании обратного кода операция вычитания реализуется как арифметическое сложение положительного числа, представленного в прямом коде, с отрицательным числом, представленным в обратном коде. Например, при вычитании из числа 10110 числа 01101 уменьшаемое представляется как положительное число в прямом коде 0 10110, а вычитаемое— как отрицательное число в обратном коде 1 10010. В представлении чисел знаковые разряды выделены полужирным шрифтом. При выполнении операции арифметического сложения над этими числами получаем алгебраическую сумму

Перенос, возникающий из знакового разряда, при использовании обратного кода должен прибавляться в младший разряд суммы. В данном примере уменьшаемое по модулю больше вычитаемого, поэтому алгебраическая сумма положительная и представлена в прямом коде. При изменении знаков слагаемых в приведенном примере на обратные

1 01001 — первое слагаемое в обратном коде

+

0 01101 — второе слагаемое в прямом коде

1 10110 — сумма в обратном коде

результатом сложения будет отрицательное число и оно будет представлено в обратном коде.

Дополнительный код отрицательных двоичных чисел может быть сформирован по следующему правилу: цифры всех разрядов, кроме знакового, инвертируются, и в младший разряд прибавляется единица. Дополнительный код может быть получен и из обратного путем прибавления единицы к младшему разряду обратного кода. При этом в знаковый разряд отрицательного числа в дополнительном коде ставится единица. Обратное преобразование из дополнительного кода в прямой производится по тому же правилу.

При использовании дополнительного кода для вычитания двоичных чисел из предыдущего примера получим

0 10110 — первое слагаемое в прямом коде

+

1 10011 — второе слагаемое в дополнительном коде

0 01001 — сумма в прямом коде

При сложении складываются цифры знаковых разрядов с отбрасыванием возникающего из этого разряда переноса. Алгебраическая сумма, полученная в результате сложения, является положительным числом и поэтому представлена в прямом коде. Если знаки слагаемых меняются на обратные:

1 01010 — первое слагаемое в дополнительном коде

+

0 01101 — второе слагаемое в прямом коде

1 10111 — сумма в дополнительном коде

то результат сложения есть отрицательное число и оно оказывается представленным в дополнительном коде.

При алгебраическом сложении двоичных чисел в образовавшейся сумме возможно переполнение разрядной сетки, которое заключается в том, что результат операции — сумма содержит большее число разрядов, чем число разрядов в устройстве, предназначенном для их хранения. Для выявления переполнения разрядной сетки используется модифицированный код. В нем два знаковых разряда и в обоих разрядах положительные числа содержат нули, а отрицательные числа — единицы. Выполнение операций суммирования с использованием модифицированного дополнительного или модифицированного обратного кода производится по сформулированным выше правилам. Если результат суммирования содержит в знаковых разрядах комбинации 01 или 10, то это служит признаком переполнения разрядной сетки. Например, при сложении чисел

00 11011 — первое слагаемое в прямом модифицированном коде

+

11 01011 — второе слагаемое в дополнительном модифицированном коде

00 00110 — сумма в прямом модифицированном коде

Переполнения разрядной сетки не возникает. Перенос из старшего знакового разряда отбрасывается. При сложении чисел 00 10110 и 00 11011

00 10110

+

00 11011

01 10001

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

11 010011

+

11 100011

10 110110

В этом случае комбинация 10 в знаковых разрядах указывает на переполнение разрядной сетки.

Умножение двоичных многоразрядных чисел включает в себя операции — определение знака произведения и определение его абсолютной величины. Знаковый разряд может быть получен суммированием цифр знаковых разрядов сомножителей без формирования переноса:

0 + 0 = 0,

0 + 1 = 1,

1 + 0 = 1,

1 + 1 = 0 без формирования переноса

При несовпадении цифр получается 1, что соответствует знаку произведения двух сомножителей с разными знаками.

Абсолютная величина значения произведения определяется путем перемножения чисел без учета их знаков. Перемножение многоразрядных двоичных чисел производится на основе таблицы двоичного умножения

0 x 0 = 0,

0 x 1 = 0,

1 х 0 = 0,

1 х 1 = 1.

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

Получающиеся в результате умножения и сдвига частичные произведения после суммирования дают полное произведение. Особенность умножения двоичных чисел состоит в том, что частичное произведение может быть либо сдвинутым на соответствующее число разрядов множимым, если соответствующая цифра множителя равна 1, либо нулем, если соответствующая цифра множителя равна 0:

10111 — множимое

______1101 — множитель

10111 — первое частичное произведение

00000 — второе частичное произведение

10111 — третье частичное произведение

10111_____— четвертое частичное произведение

100101011 — произведение

Тот же результат можно получить при умножении, начиная со старших разрядов множителя:

10111

х 1101

10111

10111

00000

10111

100101011

В цифровых устройствах процессу суммирования частичных произведений придают последовательный характер: формируется одно из частичных произведений, к нему с соответствующим сдвигом прибавляется следующее частичное произведение, к полученной сумме прибавляется с соответствующим сдвигом очередное частичное произведение, и т. д., пока не окажутся просуммированными все частичные произведения и не будет получено полное произведение.

Пример умножения чисел этим методом:

10111 — четвертое частичное произведение

101110 — сдвиг на разряд влево

_10111 — третье частичное произведение

1000101 —прибавление третьего частичного произведения

10001010 — сдвиг на разряд влево

00000 — второе частичное произведение

10001010 — прибавление второго частичного произведения

100010100 — сдвиг на разряд влево

10111 — первое частичное произведение

100101011 — прибавление первого частичного произведения

При таком методе все частичные произведения суммируются с требуемыми сдвигами друг относительно друга, благодаря чему образуется ранее приведенный результат умножения этих чисел.

При умножении дробных чисел меньше единицы умножение удобнее начинать с младшего разряда множителя. Так, при перемножении дробных чисел 0,10111 и 0,1101 получим

0,10111: — первое частичное произведение

0,01011: 1 — сдвиг на разряд вправо

+

00000: — второе частичное произведение

0,01011: — прибавление второго частичного произведения

0,00101: 11 — сдвиг на разряд вправо

+

10111: — третье частичное произведение

0,11100: 11 — прибавление третьего частичного произведения:

0,01110: 011 — сдвиг на разряд вправо

+

10111: — четвертое частичное произведение

1,00101: 011 — прибавление четвертого частичного произведения

0,10010: 1011— сдвиг на разряд вправо

Если требуется сохранить все разряды в произведении, то в разрядной сетке устройства должно быть предусмотрено число разрядов, равное сумме числа разрядов множимого и множителя. Однако при умножении дробных чисел часто в произведении требуется иметь то же число разрядов, что и в множимом. В таком приближенном представлении результата не фиксируются цифры разрядов при сдвигах, выдвигаемые правее вертикальной штриховой линии, показанной в приведенном выше примере. Таким образом, цифры младших разрядов окажутся потерянными и будет получен приближенный результат 0,100101. Далее отбрасывается последний из разрядов, и если этот разряд содержит 1, то 1 прибавляется к следующему разряду для округления результата. Следовательно, полученный результат 0,10011.

Если множимое, или множитель, или оба вместе содержат и целую и дробную части, то запятые в множимом и множителе не учитываются, они умножаются как два целых числа и от полученного произведения справа отделяются запятой т+п разрядов, где п — число дробных разрядов множимого, a m — число дробных разрядов множителя.

Деление двоичных многоразрядных чисел включает в себя две операции — определение знака частного и определение его абсолютной величины.

Знаковый разряд частного может быть получен, как и знаковый разряд произведения, суммированием цифр знаковых разрядов делимого и делителя без формирования переноса. Абсолютная величина частного определяется делением чисел без учета их знаков.

Деление начинается с того, что от делимого слева отделяется группа разрядов, причем количество разрядов в этой группе должно либо равняться количеству разрядов в делителе, либо быть на один разряд больше. Если отделение такой группы возможно, в старший разряд частного записывается 1, в противном случае в разряд единиц частного записывается нуль. Если выявилось, что частное содержит целую часть, то образуется новая группа разрядов путем вычитания из выделенной группы делителя и приписывания к разности очередной цифры делимого. Если в результате получилось число, превышающее делитель, то в частное записывается 1, в противном случае следующая цифра будет равна 0.

В дальнейшем выполняется ряд одинаковых циклов. Если последняя цифра частного была равна 1, то новая группа образуется вычитанием делителя из предыдущей группы и приписыванием очередной цифры делимого. Если последняя цифра частного 0, то для образования новой группы достаточно приписать к предыдущей группе очередную цифру делимого. Последняя цифра целой части частного получается тогда, когда после определения очередной цифры частного 1 или 0 в делимом не останется больше цифр для того, чтобы приписывать их к разности между предыдущей группой и делителем или к самой предыдущей группе. После этого начинается выделение дробных членов частного. Оно отличается от вычисления целых членов только тем, что вместо очередных цифр делимого к предыдущим группам приписываются нули.

Рассмотрим примеры, в которых делимое больше и меньше делителя:

В цифровых устройствах при выполнении операции деления так же, как и при выполнении операции алгебраического сложения, используется дополнительный и модифицированный коды. Например, при делении числа 0,11011 на 0,11101 представляем делитель в дополнительном коде 00011:

При вычитании сдвинутые делители представляются в дополнительном коде.

Для ускорения деления используется деление без восстановления остатка. При этом способе допускаются как положительные, так и отрицательные остатки при вычитании делителя. Если очередной остаток положителен, то в частное пишется 1, а на следующем цикле работы делитель вычитается из сдвинутого на один разряд влево остатка. Если же очередной остаток отрицателен, то в частное пишется 0, а на следующем цикле работы делитель прибавляется к сдвинутому на один разряд влево остатку.

Например, при делении числа N1= 10011 на число N2=0,11001 по способу без восстановления остатка при переходе к модифицированным дополнительным кодам получим N1 = 00 10011, N2=00 11001,

—N2=11 100111:

Как видно из приведенных примеров, деление является весьма трудоемкой операцией. В ряде случаев в цифровых устройствах эта операция заменяется нахождением обратной величины делителя по специальной подпрограмме и последующим умножением делимого на найденную обратную величину делителя, которая вычисляется приближенно на основе какой-либо быстро сходящейся итерационной формулы.