[Список тем] [Вступление к этой теме] Страницы темы: [1] [2]


Арифметические операции в двоичной системе счисления


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


Сложение положительных чисел


Выполнение этой операции покажем на примере:
Переносы   1     1  
Первое слагаемое N1 (0) 0 1 0 0 1
Второе слагаемое N2 (0) 0 1 1 0 1
Сумма N=N1+N2 (0) 1 0 1 1 0

Цифры разрядов суммы N=N1+N2 формируются последовательно, начиная с младшего разряда. Цифра младшего разряда суммы образуется суммированием цифр младших разрядов слагаемых. При этом, кроме цифры разряда суммы, формируется цифра переноса в следующий, более старший разряд. Таким образом, в разрядах, начиная со второго, суммируются три цифры:
цифры соответствующего разряда слагаемых и перенос, поступающий в данный разряд из предыдущего.
Перенос равен 1 во всех случаях, когда результат суммирования цифр в разряде равен или больше р=2 (р—основание системы счисления). При этом в разряд суммы заносится цифра, на р единиц (т. е. на 2) меньшая результата суммирования.


Алгебраическое сложение с использованием дополнительного кода


Для пояснения сущности излагаемого ниже метода рассмотрим следующий пример. Пусть требуется сложить два десятичных числа N1 = (0)831 и N2 = (1)376. Так как второе слагаемое — отрицательное число, пользование приемом, излагаемым в школьной программе, потребовало бы последовательности действий с заемами из старших разрядов. Предусматривать в цифровом устройстве дополнительно такую последовательность действий не обязательно. Искомый результат может быть получен и при использовании последовательности действий с передачей переносов в старшие разряды, которая применяется при сложении положительных чисел. Для этого достаточно отрицательное число (1)376 предварительно преобразовать в так называемый дополнительный код следующим образом: во всех разрядах, кроме знакового, запишем дополнение до девяти к цифрам этих разрядов и затем прибавим единицу в младший разряд. Дополнительный код для числа N2 = (1)376 есть N2доп = (1)624.
Далее произведем сложение по правилам сложения положительных чисел:
Единицы переноса показаны там, где они суммируются, а не в тех столбцах, откуда перенос осуществлен.
Переносы 1 1       
Первое слагаемое N1   (0) 8 3 1
Второе слагаемое N2доп   (1) 6 2 4
Сумма N=N1+N2   (0) 4 5 5

При сложении складываются и цифры знаковых разрядов с отбрасыванием возникающего из этого разряда переноса. Как видим, получен правильный результат (действительно, 831 — 376 = 455).
В двоичной системе счисления дополнительный код отрицательного числа формируется по следующему правилу: инвертируются (путем замены 0 на 1 и 1 на 0) цифры всех разрядов, кроме знакового, после чего в младший разряд прибавляется единица. Например, если N = (1)10110, то Nдоп = (1)01010. Обратное преобразование отрицательных чисел из дополнительного кода в прямой производится по тому же правилу.
Рассмотрим примеры выполнения операции.
Пример. Пусть N1 = (0)10110, N2 = (1)01101 N2доп = (1)10011.
Переносы 1 1   1 1    
Первое слагаемое N1   (0) 1 0 1 1 0
Второе слагаемое N2доп   (1) 1 0 0 1 1
Сумма N=N1+N2   (0) 0 1 0 0 1

Как уже указывалось выше, перенос, возникающий из знакового разряда, отбрасывается.
Пример. Изменим на обратные знаки слагаемых, использованных в предыдущем примере: N1 = (1)10110, N2 = (0)01101. Очевидно, ожидаемый ответ: N = N 1 + N 2 = (1)01001.
Переносы   1        
Первое слагаемое N1доп (1) 0 1 0 1 0
Второе слагаемое N2 (0) 0 1 1 0 1
Сумма Nдоп=(N1+N2)доп (1) 1 0 1 1 1
Сумма N=N1+N2 (1) 0 1 0 0 1

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


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


Вместо дополнительного кода для представления отрицательных слагаемых может быть использован обратный код. Обратный код отрицательных двоичных чисел формируется по следующему правилу: цифры всех разрядов, кроме знакового, инвертируются. Обратное преобразование из обратного кода в прямой производится по тому же правилу.
Рассмотрим те же примеры, используя обратный код:
Переносы 1 1   1 1    
Первое слагаемое N1   (0) 1 0 1 1 0
Второе слагаемое N2обр   (1) 1 0 0 1 0
Промежуточный результат   (0) 0 1 0 0 0
Сумма N=N1+N2   (0) 0 1 0 0 1

При использовании обратного кода перенос, возникающий из знакового разряда, прибавляется в младший разряд суммы.
Переносы   1     1  
Первое слагаемое Nобр (1) 0 1 0 0 1
Второе слагаемое N2 (0) 0 1 1 0 1
Сумма Nобр=(N1+N2)обр (1) 1 0 1 1 0
Сумма N=(N1+N2) (1) 0 1 0 0 1

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


Использование модифицированного кода


Особенность модифицированного кода состоит в том, что в нем предусматривается два знаковых разряда. В обоих знаковых разрядах положительные числа содержат нули, отрицательные — единицы.
Выполнение операции суммирования с использованием модифицированного дополнительного или модифицированного обратного кода производится по правилам, сформулированным выше. Если результат суммирования содержит в знаковых разрядах комбинацию 01 или 10, это служит признаком так называемого переполнения разрядной сетки. Переполнение разрядной сетки — явление, при котором результат операции содержит большее число разрядов, чем число разрядов в устройстве, предназначенном для его хранения. При этом некоторые разряды результата не могут быть зарегистрированы в устройстве, они теряются и результат оказывается ошибочным.
Пример. Пусть N1= (0)(0) 11011, N2 = (1)(1) 10101.
Переносы 1 1 1 1   1 1  
Первое слагаемое N1   (0) (0) 1 1 0 1 1
Второе слагаемое N2доп   (1) (1) 0 1 0 1 1
Сумма N=N1+N2   (0) (0) 0 0 1 1 0
Пример. Пусть N1 = (0)(0)10110, N2 = (0)(0)11011.
Комбинация цифр (0)(1) в знаковых разрядах результата суммирования свидетельствует о переполнении разрядной сетки, зафиксированный результат ошибочен.
Возникновение ошибки связано с тем, что при суммировании перенос из старшего разряда оказался зафиксированным во втором из знаковых разрядов. Для регистрации результата суммирования в данном примере требуется шесть разрядов (без учета знаковых разрядов).
Пример. Пусть N 1 = (1)(1)101101, N2 = (1)(1)011101.
Первое слагаемое N1доп (1)(1) 0 1 0 0 1 1
Второе слагаемое N2доп  (1)(1) 1 0 0 0 1 1
Сумма (1)(0) 1 1 0 1 1 0

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


[Список тем] [Вступление к этой теме] Страницы темы: [1] [2]