Прямой, обратный и дополнительный коды




 

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

Для представления чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный коды.

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

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

Прямой код

Это обычный двоичный код, рассмотренный в разделе двоичной системы счисления. Если двоичное число является положительным, то бит знака равен 0, если двоичное число отрицательное, то бит знака равен 1. Цифровые разряды прямого кода содержат модуль представляемого числа, что обеспечивает наглядность представления чисел в прямом коде (ПК).

Рассмотрим однобайтовое представление двоичного числа. Пусть это будет 28(10). В двоичном формате – 0011100(2) (при однобайтовом формате под величину числа отведено 7 разрядов). Двоичное число со знаком будет выглядеть так, как показано на рис. 2.1.

 

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

Обратный код

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

На рис. 2.2 приведен формат однобайтового двоичного числа в обратном коде.

 

 

В общем случае ОК является дополнением модуля исходного числа до наибольшего числа без знака, помещенного в разрядную сетку.

Алгоритм формирования ОК очень прост, при этом ОК позволяет унифицировать операции сложения и вычитания в АЛУ, которые в прямом коде выполняются по-разному. Однако работа с ОК вызывает ряд трудностей. В частности, возникают два нуля: +0 и -0, т.е. в прямом коде (в котором представлены положительные числа) имеет место (+0) = 000...0, а в обратном коде (в котором представлены отрицательные числа): (-0) = 111...1.

Кроме того, в операциях сложения и вычитания требуется дополнительная операция по прибавлению бита переноса в младший разряд суммы. Рассмотрим правила алгебраического сложения в ОК (поскольку А-В=А+(-В)). Алгоритм сложения в ОК содержит:

 

· сложение кодов, включая знаковый разряд;

· прибавление переноса к МЗР (младшему значащему разряду) суммы.

 

Пример.

Вычислить выражение -3(10) -2(10).

 

 

Пример.

Вычислить 7(10)-3(10).

 

 

Указанные трудности привели к тому, что в современных ЭВМ абсолютное большинство операций выполняется в дополнительном коде.

Дополнительный код

Дополнительный код (ДК) строится следующим образом. Сначала формируется обратный код (ОК), а затем к младшему разряду (МЗР) добавляют 1. При выполнении арифметических операций положительные числа представляются в прямом коде (ПК), а отрицательные числа – в ДК, причем обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности. На рис. 2.3 рассмотрена цепь преобразований числа из ПК в ДК и обратно в двух вариантах.

 

 

 

Пример.

Число -5(10) перевести в ДК и обратно (первый вариант).

 

 

Пример.

Число -5(10) перевести в ДК и обратно (второй вариант).

 

 

Использование ДК для представления отрицательных чисел устраняет двусмысленное представление нулевого результата (наличие двух нулей: +0 и -0), так как -0 исчезает.

В общем случае использованием ДК для записи отрицательных чисел можно перекрыть диапазон десятичных чисел от -2k-1 до +2k-1-1, где k – число используемых двоичных разрядов, включая знаковый. Так, с помощью одного байта можно представить десятичные числа от -128 до +127 либо только положительные числа от 0 до 255 (здесь под положительными числами понимаются числа без знака). В табл.2.1 приведены 4-разрядные двоичные числа от 0000 до 1111 и десятичные числа для представления их со знаком и без знака. Из этой таблицы следует, что в формате 4-разрядного двоичного числа могут быть представлены десятичные числа со знаком в диапазоне от -8 до +7 или десятичные числа без знака в диапазоне от 0 до +15.

Оба способа представления чисел широко используются в ЭВМ.

 

Таблица 2.1

Представление десятичных чисел одним полубайтом

4 - разрядное двоичное число Десятичные эквиваленты двоичного числа со знаком Десятичные эквиваленты двоичного числа без знака
0000 +0  
  +1  
.... ПК ... ...
  +6  
  +7  
1000 -8  
  -7  
  -6  
.... ДК ... ...
  -2  
  -1  

 

В ЭВМ используется быстрый способ формирования ДК. При этом двоичное число просматривается от МЗР к СЗР. Пока встречаются нули, их копируют в разряды результата. Первая встретившаяся единица также копируется в соответствующий разряд, а каждый последующий бит исходного числа заменяется на противоположный (0 на 1, 1 на 0).

 

Пример.

Число -44(10) (10101100 (2)) перевести в ДК и обратно.

 

Проверка:

 

Пример.

Перевести в ДК модуль числа -44.

 

 

Видно, что результаты преобразований обоими методами совпадают.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: