Коды для представления чисел в компьютере


 

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

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

Прямой код

Прямой код двоичного числа G, представляемого в n - разрядной сетке, определяется как

 

G , при G>=0;

Gпр= A+|G|, при G<=0,

 

где А – величина, равная весу старшего разряда сетки (для дробей А = 1, а для целых А = 2n-1). Диапазон представляемых прямым кодом чисел 0<=|G|<A.

Признаком представления положительных (отрицательных) чисел является наличие 0 (1) в старшем разряде, называемом знаковым. Таким образом, положительные числа представляются кодами 0<=Gпр<A, а отрицательные A<=Gпр<2A.

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

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

 

Обратный код

Обратный код двоичного числа G, представляемого в n - разрядной сетке, определяется как

 

G , при G>=0;

Gобр= В-|G| , при G<=0,

 

где В – величина наибольшего числа без знака, размещающегося в n - разрядной сетке (для дробей В=2-2-(n-1), а для целых В=2n-1). Диапазон представляемых обратным кодом чисел такой же, как и у прямых кодов: 0<= |G| <A. По определению обратный код отрицательного числа представляет собой дополнение модуля исходного числа до наибольшего числа без знака, помещающегося в разрядную сетку. В связи с этим получение обратного кода двоичного отрицательного числа сводится к получению инверсии n - разрядного кода модуля этого числа. Т.к. модуль чисел, представимых в n - разрядной сетке, |G|<A, в старшем (знаковом) разряде обратного кода у положительных чисел будет 0, а у отрицательных 1. В цифровых разрядах обратного двоичного кода представляется либо модуль числа (для положительных чисел), либо его инверсия (для отрицательных чисел).

 

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

Дополнительный код двоичного числа G, представляемого в n - разрядной сетке, определяется как

 

 

G , при G>=0;

Gдоп = С - |G|, при G<0,

где С – величина, равная весу разряда, следующего за старшим разрядом используемой разрядной сетки (для дробей С=2, а для целых чисел С=2n). Диапазон представляемых дополнительным кодом чисел отличается от диапазона прямого или обратного кода. Для положительных и отрицательных чисел поддиапазоны различны. Для положительных чисел (как и у прямого кода) 0<=G<A, а для отрицательных 0<|G|<=A. Из определения дополнительного кода следует, что старший (знаковый) разряд у кода положительного числа равен 0, а у кода отрицательного числа 1. В цифровых разрядах дополнительного кода положительного числа представляется модуль этого числа. Дополнительный код отрицательного числа удобно получать через обратный код.

Если рассматривать обратный и дополнительный коды числа как двоичные числа без знаков, то для отрицательных двоичных дробей Gдоп=Gобр+2-(n-1), а для отрицательных двоичных целых чисел Gдоп=Gобр+1.

Таким образом, дополнительный код отрицательного числа может быть получен из обратного путем прибавления 1 к младшему разряду обратного кода.

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

 

(+0)пр=000...0;

(+0)доп=000...0;

(+0)обр=000...0.

Отрицательный ноль изображается

в прямом коде

(-0)пр=100...0,

в обратном коде

(-0)обр=111...1,

в дополнительном коде отрицательный ноль отсутствует.

При представлении чисел дополнительным кодом ноль имеет единственное изображение. При применении обратного кода "положительный" и "отрицательный" ноль имеют разные изображения. Изменение знака числа, представленного в прямом коде, выполняется инвертированием его знакового разряда.

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

Рассмотрим применение обратного и дополнительного кодов при алгебраическом сложении n - разрядных двоичных чисел G и Q. Могут быть сформулированы следующие правила (предполагаем, что модуль алгебраической суммы меньше 1 для дробей и меньше 2n-1 для целых, и, следовательно, код суммы представим в n - разрядной сетке).

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

Пример.

Разрядная сетка n=8. Сложить в обратном коде -3 и -7.

Число (7)10 = (00000111)2 (-7)обр= 11111000;

число (3)10 = (00000011)2 (-3)обр=11111100;

складываем

11111000

+11111100


+ 1

11110101 (обратный код суммы)

Для проверки правильности вычисления инвертируем полученный код и получим код 00001010. Это соответствует (10)10. Получили число, равное сумме с противоположным знаком.

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

Правило (признак) переполнения разрядной сетки.

При алгебраическом сложении двух двоичных чисел с использованием дополнительного (обратного) кода для их представления признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из ее знакового разряда (положительное переполнение) или наоборот (отрицательное переполнение). Если и в знаковый, и из знакового разряда суммы есть переносы или нет этих переносов, то переполнение отсутствует. При положительном переполнении результат операции положительный, при отрицательном – отрицательный.

Смещенный код.

Помимо рассмотренных кодов для представления чисел со знаком применяется еще смещенный код. Этот код обычно используется для представления целых чисел, задающих порядки чисел с плавающей точкой. Определяется смещенный код двоичного числа G, представленного в n - разрядной сетке, как Gсм=А+G, либо, что то же самое,

 

А+|G| , при G>=0;

Gсм= A - |G| , при G<0,

 

где А (смещение) – величина, равная весу старшего разряда сетки (для целых А=2n-1). Диапазон представляемых чисел такой же, как и у дополнительного кода. Единица в знаковом разряде смещенного кода указывает на представление положительного числа, ноль – отрицательного.

Цифровые разряды смещенного кода для положительного числа представляют модуль этого числа, для отрицательного – инверсию модуля, к которой подсуммирована 1 к младшему разряду.

Существует простое правило перехода к смещенному коду от дополнительного (и наоборот): для перехода необходимо инвертировать знаковый разряд кода.

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

Сложение смещенных кодов может выполняться в соответствии со следующим ниже утверждением.

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

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



Дата добавления: 2016-09-26; просмотров: 3231;


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

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.013 сек.