Джон Ф.Уэйкерли Проектирование цифровых устройств. Том I (2002) (1095889), страница 16
Текст из файла (страница 16)
Кроме того, схема обнаружения нуля для системы чисел, представленных в обратном коде, должна либо проверять обе возможности, либо всегда преобразовывать 11 1! в 00. 00. *2.5.7. Представление чисел с избытком Да, действительно, различных способов представления отрицательных чисел так много, что можно говорить об нх избытке, но все же есть еще один, о котором мы расскажем. При представлении с избыткам В (ехсезз-В гергщетабоп) целого числа без знака М значение которого удовлетворяет условию 0 < М< 2, строка из т битов служит для выражения целого числа со знаком М вЂ” В, где В называется смещением (Ыаз) данной числовой системы.
Например, в системе с избытком 2 ' (ехсезз-2" ' зузгет) любое число Х, принадлежащее интервалу от -2~ ~ до +2 ' — 1, представляется в двоичном виде т битами как Х+2 ' (эта последняя величина всегда неотрицательна и меньше, чем 2 ). Диапазон значений, которые могут быть представлены в такой системе, точно совпадает с множеством возможных значений двоичных тразрядных чисел в дополнительном коде. В самом деле, вид любого числа в этих двух системах одинаков, за исключением знакового бита, значения которого в них всегда противоположны. (Это справедливо только в том случае, когда смещение равно 2" '.) Чаще всего представление с избытком применяется в числовых системах с плавающей точкой (см.
Обзор литературы). 2.6. Сложение и вычитание двоичных чисел в дополнительном коде 2.6.1. Правила сложения Из табл. 2.6, где приведены десятичные числа н их эквиваленты в различных числовых системах, видно, почему представление в дополнительном коде является предпочтительным для выполнения арифметических операций. При счете в прямом направлении, начиная с числа 1000, (-8м), каждое новое число в дополнительном коде вплоть до 011! (+7,„) можно получить из предыдущего, добавляя 1 и игнорируя перенос из 4-го разряда, когда он возникает. Этого нельзя сказать о представлении чисел в прямом коде со знаком и в обратном коде.
Поскольку обычное сложение является развитием идеи подсчета, суммирование чисел в дапалпительпач коде (иго'з-сатр!степ! адгбг(ап) можно осуществить путем простого сложения двоичных чисел, пренебрегая переносами из старшего разряда. Результатом всегда будет правильное значение суммы, пока оно не выходит за допустимые пределы этой числовой системы. Приведем несколько примеров десятичного сложения и сложения двоичных чисел в дополнительном коде, подтверждающих сказанное: 2.6.сложеииеивычитаниедвоичныкчисел вдололнителыюмкоде 65 0011 + 0100 -2 1110 + -б + 1010 0111 -8 1 1000 0110 + 110! »б + 3 +4 0100 + -7 + 1001 +3 -3 !!01 1 0011 Табл. 2.6.
Десятичные и 4-разрядные двоичные числа Десятичные Двоичные числа числа в дополнительном в обратном в арамом коде коде коде со знаком а коде с избытком 2 ' 2.6.2. Графическая интерпретация На рис. 2.3 двоичная система чисел в дополнительном коде изображена иначе с помощью 4-разрядного «счетчика». Здесь числа показаны в циклической форме или в форме представления «по модулю». Этот счетчик действует наподобие реального реверсивного счетчика, который будет рассмотрен в параграфе 8.4. Начиная с произвольного числа, на которое указывает стрелка, мы можем сложить его с +л, добавляя и раз по единице, то есть повернув указатель на и позиций по 1000 !00! 1010 1011 1100 !!01 !11О 1111 0000 0001 0010 0011 0100 0101 01!О 0111 ! 000 1001 1010 1011 1!00 !101 1110 1111или 0000 0001 0010 0011 0100 О!01 О!10 0111 1!11 !!!О 1101 1100 1О!! 1010 1001 1000 нли 0000 0001 0010 0011 О!ОО О!01 О!10 0111 0000 000! 00!О 00! ! 0100 010! 0110 О!!1 !000 1001 1010 101! 1100 110! 1110 !1!! 66 Глава 2.
Числовые системы и коды часовой стрелке. Очевидно также, что можно вычесть и из того или иного числа, отнимая л раз по единице, то есть повернув указатель на и позиций против часовой стрелки. Конечно, результат этих действий будет правильным только в том случае, когда и достаточно мало, так что мы не пересекаем разрыв между — 8 и +7.
Сложение положительных чисел Вычитание положительных чисел 0100 1100 101 1О! Рис. 2.3. Представление счета «пс модулю» для 4-разрядных двоичных чисел в дополнительном коде Самое интересное здесь заключается в том, что мы можем вычесть и (или прибавить-и), повернув указатель на ! б — л позиций по часовой стрелке.
Обратите внимание: величина (1б — и) — это то, что мы назвали точным дополнением двоичного 4-разрядного числа л, то есть представлением числа — п в дополнительном коде. Эта графическая иллюстрация свидетельствует в пользу утверждения о том, что представление отрицательных чисел в дополнительном коде позволяет складывать их с другими числами по обычным правилам сложения. Прибавление числа эквивалентно повороту указателя парис.
2 3 на соответствующее число позиций по часовой стрелке, 2.6.3. Переполнение 1101 + 1010 10111 — +7 01'1 + 0110 1011 = -5 +5 ч- +б +11 1000 + 1000 10000 = +О 0111 + 0111 1110 = -2 +7 + +7 -!б ч-!4 Если результат выполнения операции сложения выходит за пределы интервала чисел, представимых в данной системе, то говорят, что происходит перенолненле (отеглоы). В примере на рис. 2.3 переполнение возникает при сложении положительных чисел, когда мы переходим через отметку+7. Сложение двух чисел с разными знаками никогда не может привести к переполнению, а сложение двух чисел с одинаковыми знаками может, как это видно из следующих примеров: 2.6. Сложение и вычитание двоичных чисел влополнительном коде 07 2.б.4.
Правила вычитания Числа, представленные в дополнительном коде, могут участвовать в вычитании как обычные двоичные числа без знака, и для них можно сформулировать соответствующие правила обнаружения переполнения. Однако в большинстве случаев схемы, предназначенные для вычитания чисел в дополнительном коде(пгай-астр!степ( гнд(гасбап), не выполняют эту операцию непосредственно. Чаще всего в них осуществляется изменение знака у вы читаемого путем взятия его точного дополнения, а затем оно складывается с уменьшаемым по обычным правилам сложения.
Изменение знака у вычитаемого и сложение с уменьшаемым можно следующим образом выполнить в одной единственной операции сложения; берем поразрядное дополнение вычитаемого и складываем его с уменьшаемым, полагая значение переноса в младший разряд (с ) равным 1, вне О. Приведем примеры: 1 — с„ 001! 001! — 0100 + 1011 1111 1 — с,„ +4 0100 0100 — +3 — 0011 + 1100 +1 1 0001 1 — с 1101 + 0011 1 0001 ! — с 0011 + 001! 0111 -3 1101 — -4 — 1100 +3 0011 — -4 — 1100 +7 Переполнение при вычитании можно обнаружить по тому же правилу, что и при сложении, проверяя знаки уменьшаемого и обратного кода вычитаемого.
Или, как это видно из приведенных примеров, мы можем сравнить перенос в знаковый разряд с переносом из него: переполнение обнаруживается по тому же правилу, что и при сложении, независимо от знаков исходных чисел, участвующих в операции вычитания, и знака результата. Прн попытке изменить знак у «лишнего» отрицательного числа возникает переполнение; согласно сформулированным правилам это произойдет в результате прибавления! при взятии точного дополнения: -(-8) = -1000 = О!!1 + 000! 1(ВО = -Я Однако это число все же может участвовать в сложении и вычитании, пока окончательный результат операции остается внутри диапазона представимых чисел: Существует замечательное пратта обнаружения перепоя пенал (оистДаи' га(е) при сложении: сложение приводит к переполнению, если знаки слагаемых одинаковы, а знак суммы отличается от знака слагаемых.
Это правило иногда формулируют в терминах переносов, возникающих при выполнении операции сложения; переполнение наступает, если бит переноса в знаковый разряд с н бит переноса из него с е ьл различны. Внимательное рассмотрение приведенной ранее табл. 2. 3 показывает, что эти два правила эквивалентны: имеются только два случая, когда с Ф с, и это те два е оч' случая, в которых х =у, а бит суммы имеет другое значение. 68 Глава 2. Числовые системы и коды 1 — с„ 1101 + 0111 10101 0100 + 1000 1101 — 1000 1100 2.6.5. Дополнительный код и двоичные числа без знака 0000 110 011 !100 0100 Вычитание Сложение 101 101 1000 Рис. 2.4. Представление счета «по модулю» для 4-разрядных двоичных чисел без знака Легко видеть, что выход за пределы диапазона представимых чисел при сл ожении происходит в том случае, когда указатель, вращаясь по часовой стрелке, проходит через разрыв между 15 и О.
Говорят, что при этом возникает перенос 1саг!у) из старшего разряда. Аналогично, при вычитании мы выходим за пределы диапазона представимых чисел, если указатель в результате вращения против часовой стрелки проходит Поскольку числа, представленные в дополнительном коде, складываются и вычитаются по тем же самым основным алгоритмам двоичного сложения и вычитания, что и числа без знака той же длины, компьютер или какая-либо другая цифровая система могут использовать один и тот же сумматор для обработки чисел обоих типов.
Однако результат должен интерпретироваться по-разному в зависимости от того, с чем имеет дело система: с ч нон амн со знаком (т о есть с числам и нз интервала от — 8 до+7; ияпег)питЬегз) или с чнслаии бвз знака (из интервала от О до 15; ипз1дпег1пятЬегз). Выше на рис. 2.3 мы представили систему 4-разрядных двоичных чисел в дополнительном коде графически. Подобные построения можно выполнить и для 4- разрядных двоичных чисел без знака, как это сделано на рис. 2.4.