русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 5047; Нарушение авторских прав


 

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

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

Прямой код двоичного числа G с (n-1) цифровыми разрядами определяется как

Gпр =

где А — величина, равная весу знакового разряда. Для дробных чисел А = 1, а для целых А = 2n-1.

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

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

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

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



Go6p=2-2 –(n-1) – lG-l,

если G- — двоичная дробь, и

G-обр = 2n – 1 - |G-|

если G- — целое двоичное число.

При представлении отрицательного двоичного числа в дополни­тельном коде ставят 1 в разряд знака, а цифровую часть числа заме­няют дополнением модуля числа до 1 или 2n-1 соответственно для дробей и целых чисел. Дополнительный код отрицательного числа G определяется выражением

G- доп=2-|G-|

если G- — двоичная дробь, и

G- доп=2n-|G-|

 

если G- — целое двоичное число.

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

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

При выполнении расчетов на машине могут возникнуть как «по­ложительный», так и «отрицательный» 0. Положительный 0 в прямом коде имеет вид

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

Отрицательный 0 изображается в прямом коде

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

в обратном

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

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

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

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

для дробей

-G-пр = |G-| = 2 – 2-(n-1) – G-обр

-G-пр = |G-| = 2 – G-доп

 

для целых чисел

-G-пр = |G-| = 2n – 1 – G-обр

-G-пр = |G-| = 2n – G-доп

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

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

Пример.

Пусть требуется выполнить две операции:

176- 154 и 176- 215

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

176 8 154 8 215 8

176 22 8 152 19 8 208 26 8

0 16 2 2 16 2 7 24 3

6 3 2

 

17610=2608 15410=2328 21510=3278

0101100002 0100110102 0110101112

инвертируем вычитаемые в обратный и дополнительный коды

101100101 обр 1001010002

+ 1 + 1

101100110 доп 100101001 доп

теперь складываем уменьшаемое с дополнительными кодами обоих вычитаемых с учётом знаков

0 010110000 0 010110000

+ 1 101100110 + 1 100101001

10 000010110 1 111011001

в первой операции возникла единица переполнения, но знак результата плюс, поэтому переводим число в восьмеричную систему и далее в десятичную: 268=2·81+6·80=2210, что соответствует результату первой операции.

во второй операции знак результата отрицательный, поэтому его придется перевести в дополнительный код:

000100110 обр

+ 1

000100111 доп =478=3910

или с учётом знака -39.

 

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

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

 



<== предыдущая лекция | следующая лекция ==>
Представление чисел с плавающей запятой | В распакованном формате


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.