Сложение в двоичном дополнительном коде

Алгоритм сложения чисел в двоичном дополнительном коде такой же, как для двоичного сложения, только здесь все коды, включая результат операции, будут иметь одинаковую длину. Это значит, что если в ре­зультате сложения появляется дополнительный бит с левого края, он будет отсе­чен. Именно поэтому 0101 и 0010 в сумме дают 0111, а сумма 0111 и 1011 равна 0010 (0111 + 1011 = 10010, которая усекается до 0010).

Рассмотрим примеры сложения в дополнительном коде. В каж­дом случае десятичная запись представлена 4-битовым кодом, а результат сложения опять переведен в десятичную систему счисления.

Обратим внимание на то, что согласно правилам традиционной алгебры, которые мы  изучали в школе, то в третьем примере нам бы потребовалась совсем другая операция (вычитание). С другой стороны, в двоичном дополни­тельном коде мы можем вычислить результат, во всех случаях применяя алго­ритм сложения.

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

 

Сложение в десятичной системе счисления Сложение в двоичном дополнительном коде Результат сложения в десятичной записи
+4 3 +0100  0011 0111 7
+-2 -3 +1110  1101 1011 -5
+6 -2 +0110  1110 0100 4

 

 

Рис. 1.11. Таблица сложений чисел

Например, операция вычитания 7-5 аналогична операции сложения 7 + (-5). Следовательно, если потребуется вычесть 5 (с кодом 0101) из 7 (с кодом 0111), то машина, прежде всего, заменит 5 на -5 (с кодом 1011) и затем выполнит операцию сложения, результатом которой будет 0010, то есть код числа 2:

-7        -0111             +0111

5               0101               1011

2                                    0010

Проблема переполнения

Есть проблема в любом представлении чисел в двоичном дополнительном коде - ограничение на размер чисел, представляемых данным количеством битов. Например, нельзя получить пра­вильного ответа, выполнив операцию сложения 5 + 4, если будем выполнять сложение в 4-битовом двоичном дополнительном коде. Ведь у числа 9 нет соответствующей записи. На самом деле мы получим ответ — 7. Такая ошибка называется переполнением (overilov), она возникает, когда нужно сохранить число, не попадающее в диапазон чисел, которые могут быть представлены в двоичном дополнительном коде. Переполнение возникает, когда нужно сложить два положительных или два отрицатель­ных числа. В обоих случаях можно проверить, есть ли ошибка, посмотрев на знаковый разряд полученного результата, то есть переполнение возникает, если сумма двух положительных чисел имеет код отрицательного числа или сумма двух отрицательных чисел имеет код положительного числа.

Большинство машин манипулируют более длинными последовательностями битов, чем те, которые здесь обсуждаются, и операции с большими числами не вызывают переполнения. В настоящее время принято использовать 32-битовые последова­тельности для хранения чисел в двоичном дополнительном коде, что позволяет порождать числа до

2 147 438 647, прежде чем возникнет переполнение. Если нужно записать большее число, то можно использовать более длинный код или можно изменить единицы измерения. Например, использование в расчетах километров, а не метров позволит уменьшить размер чисел и достичь необходимой точности вычислений.

Проблема состоит в том, что компьютер может ошибаться, и пользова­тель должен знать о возможной опасности такой ошибки. Программисты и пользо­ватели из-за своей  самоуверенности игнорируют тот факт, что маленькие числа могут складываться и порождать большие. Например, раньше было приня­то использовать 16-битовый двоичный код, который означал, что переполнение не возникнет, пока не появится значение 215 = 32 768. Например девятнадцатого сентября 1989 года компьютерная система в госпитале допустила ошибку после долгих лет надежной работы. Исследование показало, что тот день был 32 768-м днем после 1 января 1900 года. Как вы думаете, какова цена этой ошибки?

Представление с избытком

Другой способ представления целочисленных значений называется представле­нием с избытком (excess notation). Коды, соответствующие числовым значениям, имеют одинаковую длину. Для того чтобы составить таблицу кодов, сначала нужно выбрать длину последовательности битов, затем выписывать эти наборы в пря­мом порядке. Можно заметить, что код с одной 1 в позиции старшего разряда находится примерно посередине списка. Пусть он будет представлением нуля; коды до него используются для представления 1, 2, 3 и т. д., коды после него используются для -1,-2, -3 и т. д. Окончательный вариант таблицы 4-битовых кодов изображен в таблицах на рис 1.12. Можно заметить, что число 5 имеет код 1101, а чис­ло -5 имеет код 0011. Обратите внимание на то, что различие между представле­нием в двоичном дополнительном коде и избыточном коде заключается в том, что знаковый разряд у них имеет противоположное значение.

Таблица кодов, изображенная на рисунке 1.12, называется представлением с избытком восемь. Для того чтобы понять, почему это так, сначала переведём коды из таблицы в десятичную систему счисления, как обычный двоичный код, и сравним полученные значения со значениями в таблице. В каждом случае мы обна­ружим, что полученный результат превосходит код в представлении с избытком на восемь. Например, последовательность 1100 в двоичной системе является ко­дом 12, но в представлении с избытком она является кодом 4; последователь­ность 0000 в двоичной системе является кодом 0, а в представлении с избыт­ком — кодом 8. Точно так же 5-битовое представление с избытком будет на­зываться представлением с избытком 16, так как, например, последователь­ность 10000 будет кодом 0, а не 16, как в двоичной записи.

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

 

Набор битов Значение   Набор битов Значение
1111 7   111 3
1110 6   110 2
1101 5   101 1
1100 4   100 0
1011 3   011 -1
1010 2   010 -2
1001 1   001 -3
1000 0   000 -4
0111 -1  

0110 -2  

0101 -3  

0100 -4  

0011 -5  

0010 -6  

0001 -7  

0000 -8  

 

Рис. 1.12. 4-битовое и 3-битовое представление с избытком

Хранение дробей

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: