Модифицированные обратный и дополнительный коды
При переполнении разрядной сетки, происходит перенос единицы в знаковый разряд. Это приводит к неправильному результату, причем положительное число, получившееся в результате арифметической операции может восприниматься как отрицательное (так как в знаковом разряде «1») и наоборот.
Здесь X и Y – коды положительных чисел, но ЭВМ воспринимает результат их сложения как код отрицательного числа (“1” в знаковом разряде). Для обнаружения переполнения разрядной сетки вводятся модифицированные коды.
Модифицированный обратный код – в нем под знак числа отводится не один, а два разряда. Форма записи чисел в модифицированном обратном коде выглядит следующим образом:
1) для положительного числа
X= 


2) для отрицательного числа
X= 


В модифицированном обратном и модифицированном дополнительном кодах под знак числа отводится не один, а два разряда: «00» соответствует знаку «+», «11» – знаку «-«. Любая другая комбинация (“01” или “10”), получившаяся в знаковых разрядах служит признаком переполнения разрядной сетки. Сложение чисел в модифицированных кодах ничем не отличается от сложения в обычных обратном и дополнительном кодах.
Рассмотрим предыдущий пример, выполнив сложение в модифицированном обратном коде:
| X= 00,101011 Y= 00,110100 X+Y= 01,011111 |
В ЭВМ в процессе работы оба знаковых разряда сравниваются. В случае появления признака переполнения машина останавливается.
Модифицированный дополнительный код также рассматривает два знаковых разряда, а во всем остальном ничем не отличается от обычного дополнительного кода, то есть:
1) для положительного числа
X= 


2) для отрицательного числа
Пример. Даны два числа: X=101001 и Y= –11010. Сложить их в дополнительном и модифицированном дополнительном кодах.
1) Переведем X и Y в дополнительный и модифицированный дополнительный код:
| Обычная запись | Обратный код | Дополнительный код |
| X=+0101001 Y=–0011010 | Xобр=0,0101001 Yобр=1,1100101 | Xдоп=0,0101001 Yдоп=1,1100110 |
| Обычная запись | Мод. обратный код | Мод. дополнительный код |
| X=+101001 Y=–011010 | =00,101001 =11,100101 | =00,101001 =11,100110 |
2) Выполним сложение:
Xдоп= 0,0101001 Yдоп= 1,1100110 1)0,0001111 отбрасывается (X+Y)доп= 0,0001111 | X = 00,101001 Y = 11,100110 1) 00,001111 отбрасывается (X+Y) = 00,001111 |
Переполнения нет (в знаковых разрядах “00”), поэтому результаты, полученные в обычном и модифицированном кодах совпадают (X+Y=1111).
Модифицированные обратный и дополнительный коды.
| Например: X= 0,1010110 Y= 0,1101000 X+Y= 1,0111110 |
При переполнении разрядной сетки, происходит перенос единицы в знаковый разряд. Это приводит к неправильному результату, причем положительное число, получившееся в результате арифметической операции может восприниматься как отрицательное (так как в знаковом разряде «1») и наоборот.
Здесь X и Y – коды положительных чисел, но ЭВМ воспринимает результат их сложения как код отрицательного числа (“1” в знаковом разряде). Для обнаружения переполнения разрядной сетки вводятся модифицированные коды.
Модифицированный обратный код – в нем под знак числа отводится не один, а два разряда. Форма записи чисел в модифицированном обратном коде выглядит следующим образом:
1) для положительного числа
X= 


2) для отрицательного числа
X= 


В модифицированном обратном и модифицированном дополнительном кодах под знак числа отводится не один, а два разряда: «00» соответствует знаку «+», «11» – знаку «-«. Любая другая комбинация (“01” или “10”), получившаяся в знаковых разрядах служит признаком переполнения разрядной сетки. Сложение чисел в модифицированных кодах ничем не отличается от сложения в обычных обратном и дополнительном кодах.
Рассмотрим предыдущий пример, выполнив сложение в модифицированном обратном коде:
| X= 00,101011 Y= 00,110100 X+Y= 01,011111 |
В ЭВМ в процессе работы оба знаковых разряда сравниваются. В случае появления признака переполнения машина останавливается.
Модифицированный дополнительный код также рассматривает два знаковых разряда, а во всем остальном ничем не отличается от обычного дополнительного кода, то есть:
1) для положительного числа
X= 


2) для отрицательного числа
Пример. Даны два числа: X=101001 и Y= –11010. Сложить их в дополнительном и модифицированном дополнительном кодах.
1) Переведем X и Y в дополнительный и модифицированный дополнительный код:
| Обычная запись | Обратный код | Дополнительный код |
| X=+0101001 Y=–0011010 | Xобр=0,0101001 Yобр=1,1100101 | Xдоп=0,0101001 Yдоп=1,1100110 |
| Обычная запись | Мод. обратный код | Мод. дополнительный код |
| X=+101001 Y=–011010 | =00,101001 =11,100101 | =00,101001 =11,100110 |
2) Выполним сложение:
Xдоп= 0,0101001 Yдоп= 1,1100110 1)0,0001111 отбрасывается (X+Y)доп= 0,0001111 | X = 00,101001 Y = 11,100110 1) 00,001111 отбрасывается (X+Y) = 00,001111 |
Переполнения нет (в знаковых разрядах “00”), поэтому результаты, полученные в обычном и модифицированном кодах совпадают (X+Y=1111).
Упражнения 2.
1) Записать число в прямом, обратном и дополнительном кодах:
а) 11010; б) –11101; в) –101001; г) –1001110.
2) Перевести X и Y в прямой, обратный и дополнительный коды. Сложить их в обратном и дополнительном кодах. Результат перевести в прямой код. Проверить полученный результат, пользуясь правилами двоичной арифметики.
| а) X= –11010; Y= 1001111; | б) X= –11101; Y= –100110; | в) X= 1110100; Y= –101101; |
| г) X= –10110; Y= –111011; | д) X= 1111011; Y= –1001010; | е) X= –11011; Y= –10101. |
Сложить X и Y в модифицированном обратном и модифицированном дополнительном восьмиразрядных кодах. В случае появления признака переполнения увеличить число разрядов в кодах и повторить суммирование. Результат перевести в прямой код и проверить, пользуясь правилами двоичной арифметики.
Формы представления чисел в ЭВМ.
При проектировании ЭВМ, создании инструментального и прикладного программного обеспечения разработчикам приходится решать вопрос о представлении в ЭВМ числовых данных. Для решения большинства прикладных задач обычно достаточно использовать целые и вещественные числа. Запись целочисленных данных в запоминающем устройстве ЭВМ не представляет затруднений: число переводится в двоичную систему и записывается в прямом коде. Диапазон представляемых чисел в этом случае ограничивается количеством выделенных для записи разрядов. Для вещественных данных обычно используются две формы записи: число с фиксированной точкой (ЧФТ) и число с плавающей точкой (ЧПТ).
Модифицированные коды
Важная особенность рассмотренных кодов состоит в том, что в процессе выполнения операции сложения-вычитания не происходит переполнения цифровой части числа и переноса в знаковый разряд. Переполнение возникает лишь в знаковом разряде. Так бывает потому, что сумма двух слагаемых по модулю меньше единицы.
При решении реальных задач часто трудно определить заранее, будет ли сумма двух слагаемых меньше единицы. Во всяком случае, для предотвращения переполнения можно вводить дополнительные ограничения на величину слагаемых, сужающих диапазон чисел, с которыми оперирует машина. И то, и другое является неприемлемым.
Рассмотрим такой пример:
То есть получаем неправильный результат как по знаку, так и в цифровой части.
Рассмотрим ещё один пример:
Можно заметить, что переполнение числовой сетки происходит в случае одинаковых знаков слагаемых, так как именно в этом случае модуль результата превосходит модули каждого из слагаемых, сам факт переполнения может быть зафиксирован изменением знака результата.
Таким образом, одним из способов фиксации переполнения является автоматическое определение перехода от одинаковых знаков слагаемых к противоположному знаку результата.
Однако такой способ фиксации переполнения неудобен, так как предварительно знаки слагаемых должны быть запомнены, сравнены между собой и после получения результата.
Существо модифицированных кодов состоит в том, что к знаковому разряду добавляется ещё один разряд:
» + » ставится в соответствие 00
» – » ставится в соответствие 11
Тогда, по определению модифицированным дополнительным кодом числа называется
Возникающий в знаковых разрядах перенос теряется. В целом же модифицированный код не отличается от простого дополнительного. Аналогично, по определению, обратным кодом является:
Так как в сложении по-прежнему участвуют только числа меньше единицы, то
Поэтому старший знаковый разряд не может быть искажён переносом из цифровой части числа, с другой стороны, перенос, возникающий при сложении чисел в случае, когда
искажает младший знаковый разряд.
При этом различают два типа переполнения :
Прямой, обратный и дополнительный коды двоичного числа
Прямой код двоичного числа
Обратный код двоичного числа
Дополнительный код двоичного числа

Мы знаем, что десятичное число можно представить в двоичном виде. К примеру, десятичное число 100 в двоичном виде будет равно 1100100, или в восьмибитном представлении 0110 0100. А как представить отрицательное десятичное число в двоичном виде и произвести с ним арифметические операции? Для этого и предназначены разные способы представления чисел в двоичном коде.
Сразу отмечу, что положительные числа в двоичном коде вне зависимости от способа представления (прямой, обратный или дополнительный коды) имеют одинаковый вид.
Прямой код
Обратный код
Для неотрицательных чисел обратный код двоичного числа имеет тот же вид, что и запись неотрицательного числа в прямом коде.
Для отрицательных чисел обратный код получается из неотрицательного числа в прямом коде, путем инвертирования всех битов (1 меняем на 0, а 0 меняем на 1).
Для преобразования отрицательного числа записанное в обратном коде в положительное достаточного его проинвертировать.
Арифметические операции с отрицательными числами в обратном коде:
Дополнительный код
В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).
Арифметические операции с отрицательными числами в дополнительном коде
Вывод:
1. Для арифметических операций сложения и вычитания положительных двоичных чисел наиболее подходит применение прямого кода
2. Для арифметических операций сложения и вычитания отрицательных двоичных чисел наиболее подходит применение дополнительного кода


Лекция 7: Способы представления чисел в ЭВМ. Сложение чисел в обратном и дополнительном кодах
Модифицированные дополнительный и обратный коды и их использование в операции алгебраического суммирования
В модифицированных кодах кодирование знака осуществляется 2-мя разрядами:
При этом изображение числа X в этих кодах определяется равенствами:
Эта избыточность, сохраняя все качества обычных дополнительного и обратного кодов, дополняет их способностью фиксировать переполнение.
Знаковые разряды результата «01» определяют положительное переполнение в операциях алгебраического суммирования, а «10» – отрицательное.
При этом основная методика выполнения операций алгебраического суммирования в обратном и дополнительном кодах не меняется:
Данный метод, при всей его простоте и наглядности, практического применения в ЭВМ не нашел. В основном, это связано с его большой избыточностью при кодировании данных и потерями времени при выполнении операции и последующей интерпретации результата.
Метод на основе логического преобразования сигналов межразрядных переносов
В настоящее время практически во всех компьютерах роль модифицированных кодов выполняют переносы, идущие в знаковый и из знакового разряда. Определение факта наличия переполнения выполняется практически одновременно с выполнением самой операции суммирования по следующей формуле:
на примере восьмиразрядных операндов, где C7 – перенос в старший (знаковый) разряд, а C8 – перенос из знакового разряда.
Так при сложении операндов
произойдет переполнение разрядной сетки результата:
а при сложении операндов
нет, так как в данном случае: 
Такой подход требует использования всего лишь одного дополнительного элемента – «сумма по модулю два» – в сумматоре и практически не снижает его быстродействия.
Краткие итоги
В лекции рассмотрено представление чисел в прямом, обратном и дополнительном кодах. Особое внимание уделено дополнительному коду представления числа как наиболее распространенному в современных компьютерах. Показаны особенности алгебраического суммирования чисел в обратном и дополнительном кодах при различных сочетаниях операндов. Рассмотрены механизмы фиксации переполнения при выполнении операции алгебраического суммирования чисел.
=00,101001
=11,100101
=00,101001
=11,100110
Xдоп= 0,0101001 Yдоп= 1,1100110 1)0,0001111 отбрасывается (X+Y)доп= 0,0001111
= 00,101001 Y
=00,101001
=11,100101
=00,101001
=11,100110
Xдоп= 0,0101001 Yдоп= 1,1100110 1)0,0001111 отбрасывается (X+Y)доп= 0,0001111
= 00,101001 Y 














