Основы машинной арифметики

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

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

Двоичная арифметика.Арифметические операции в любых позиционных системах счисления выполняются поразрядно, как и в десятичной СС. Все операции имеют свои особенности. Так, при сложении двух чисел может возникнуть перенос в старший разряд, если сумма слагаемых в разряде больше либо равна p – основанию СС. При вычитании может иметь место заём единицы из старшего разряда, если уменьшаемое в разряде меньше вычитаемого. При этом следует учитывать, что единица, перенесенная в младший разряд, превращается в p . Эти правила для случая двоичной системы счисления сведены в табл. 12.1.

Таблица 12.1

Таблица бинарных операций

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

Пример 12.1. Вычислить сумму, разность и произведение чисел А и В, где А=1010,011(2), В=100,101(2). Вычислить частное от деления C : D , где С=11001(2), D=101(2).

 

 

 

В строке "заём" точка над единицей означает, что эта единица занята в младший разряд. Поскольку при переходе в младший разряд она "превращается" в p , а p = 2 в нашем случае, то для ясности понимания так и записано, хотя это и не совсем корректно. Если заём движется дальше, то от двойки в разряде остается единица, а другая идет в следующий младший разряд.

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

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

Рассмотрим сложение и вычитание чисел, представленных в форме с плавающей запятой. Пусть даны два положительных числа, представленных в нормализованном виде в системе счисления с основанием p :

Поскольку сложение и вычитание в позиционных системах счисления выполняются поразрядно, то необходимо, чтобы совпадали масштабы одноимённых разрядов мантисс слагаемых. С этой целью при необходимо привести числа x 1 и x 2 к одному порядку. Во избежание переполнения из-за ограничений на мантиссу () числа следует приводить к порядку большего числа. Полагая для определённости запишем

(12.1)

 

В соответствии с изложенным, при сложении (вычитании) чисел с плавающей запятой действия выполняются в следующем порядке.

1. Выравнивание порядков – порядок меньшего числа приводится к порядку большего по абсолютному значению числа, а мантисса меньшего числа сдвигается вправо на число разрядов, равное разности порядков ().

2. Сложение (вычитание) мантисс.

3. Округление и нормализация (если нужно) результата.

Сложение. Рассмотрим на примере сложения двух положительных двоичных чисел.

Пример 12.2. Вычислить сумму чисел и представив их в форме с плавающей запятой, при условии, что в разрядной сетке на представление мантиссы отведено 5 разрядов, а на представление порядка – 3 разряда.

Запишем числа в нормализованном виде

x 1 = 0,11001∙210; x 2 = 0,1001∙20;

В разрядной сетке они будут выглядеть:

x 1 : 0 010 0 11001,
x 2 : 0 000 0 10010.

1. Выравнивание порядков

x 1 : 0 010 0 110010,
x 2 : 0 010 0 001001.

2. Сложение мантисс (вместе со знаковыми разрядами)

3. Округление (прибавлением 1 к старшему из отбрасываемых разрядов)

Отбросив шестой разряд получаем округленную сумму мантисс 0 11010.

4. Нормализация (не требуется, так как переноса из мантиссы не было).

Запишем ответ x1+x2 = 0 010 0 11010 = 0,1101∙210 =11,01(2) .

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

Для упрощения операции вычитания и сведения её к сложению используется специальное представление отрицательных чисел в машинных кодах.

Машинные коды.Машинные коды чисел бывают трех типов: прямой код, дополнительный и обратный.

Рассмотрим число x , представленное в форме с плавающей запятой:

(12.2)

 

Обозначим его мантиссу R = 0, a 1 a 2 … an . С учётом правила кодирования знаков, её представление в фоме ПЗ можно записать так :

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

(12.3)

 

Из равенства

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

(12.4)

 

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

Операцию вычитания можно представить и в другом виде:

Код, определённый с помощью этого соотношения

(12.5)

 

называется обратным кодом числа. Он представляет собой дополнение мантиссы до максимального базисного числа.

Из соотношений (12.3)–(12.5) можно сделать вывод, что для положительных чисел прямой, обратный и дополнительный коды совпадают с нормализованной мантиссой числа. Для отрицательных чисел из (12.4) и (12.5) получаем соотношение, связывающее обратный и дополнительный коды:

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

Рассмотрим три числа и запишем их машинные коды:

Учитывая, что p в p-ичной системе счисления имеет вид 10, вычислим дополнительные коды по формуле (12.4). Целая часть результата идет в знаковый разряд кода (он отделен пробелом):

[x]доп = p+R = 10–0,101 = 1,011 = 1 011;

[y]доп = p+R = 10–0,3A0F = F C5F1;

[ z ]доп = [ z ]пр = 0 0751.

Теперь вычислим обратные коды:

[ x ]обр = [ x ]доп – p – n = 1 011–0 001 = 1 010;

[y] обр = F C5F1 – 0 0001 = F C5F0;

[ z ]обр = [ z ]пр = 0 0751.

Отметим, что для получения обратного кода отрицательного двоичного числа нужно просто заменить 0 на 1 и 1 на 0 в записи прямого кода этого числа.