Лекция "алгоритмы получения прямого обратного и дополнительного кода числа. примеры."

  • Лекции
  • docx
  • 15.03.2017
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Для получения дополнительного k-разрядного кода отрицательного числа необходимо следующее: 1. Модуль числа представить прямым кодом в k двоичных разрядах. 2. Значения всех бит инвертировать (все нули заменяются на единицы, а единицы на нули), таким образом получается k-разрядный обратный код исходного числа. 3. К полученному обратному коду, трактуемому как k-разрядное неотрицательное двоичное число, прибавить единицу. Заметим, что получение дополнительного кода одного и того же отрицательного числа для типов разной разрядности на основе ранее полученного дополнительного кода сводится к удалению или добавлению левых дополнительных разрядов, заполненных единицами.
Иконка файла материала тема 1 вопрос 15.docx
1. 2. 3. тема 1 вопрос 15 алгоритмы получения прямого обратного и дополнительного кода числа. примеры. 1.2.1. Алгоритм получения дополнительного кода Для получения дополнительного k­разрядного кода отрицательного числа необходимо следующее:  Модуль числа представить прямым кодом в k двоичных разрядах. Значения всех бит инвертировать (все нули заменяются на единицы, а единицы на  нули), таким образом получается k­разрядный обратный код исходного числа. К полученному обратному коду, трактуемому как k­разрядное неотрицательное  двоичное число, прибавить единицу. Заметим, что получение дополнительного кода одного и того же отрицательного числа для типов  разной разрядности на основе ранее полученного дополнительного кода сводится к удалению или  добавлению левых дополнительных разрядов, заполненных единицами.  При представлении отрицательного числа m дополнительным кодом в самом левом (знаковом) бите  записывается знак отрицательного числа (единица), а в остальных разрядах записывается число 2k­1 ­ | m|. Если это число рассматривать как положительное, то максимальное по модулю отрицательное  число, которое можно представить в k­ разрядах, равно ­2k­1.  Описанный выше алгоритм получения дополнительного кода для отрицательного числа знаковую  единицу в левом разряде образует автоматически при |m| ≤ 2k­1. Если же 2k­1 < |m| < 2k, то попытка  реализации данного алгоритма приведет к тому, что в левом разряде будет находиться цифра 0. Это  соответствует компьютерному представлению положительных чисел, что неверно. Именно поэтому в  определении дополнительного кода на значение наложено ограничение.  Для полноты рассмотрения получим дополнительно 8­разрядный код для чисел ­128 (минимальное  представимое число), ­127 (число, обратное максимально представимому) и ­0.  Число Прямой код модуля Обратный код Дополнительный код ­0 ­127 ­128 10 000 000 01 111 111 00 000 000 01 111 111 10 000 000 11 111 111 10 000 000 10 000 001 00 000 000 Отметим, что для числа ­128 прямой код совпадает с дополнительным, а дополнительный код числа  ­0 совпадает с обычным нулем. Однако при преобразовании обратного кода для числа ­0 в его  дополнительный код правила обычной двоичной арифметики оказываются нарушенными, а именно:  1111 11112 +1 = 1 0000 00002 = 2k Но, поскольку описанные действия производятся в k двоичных разрядах, левая единица результата  оказывается лишней и игнорируется.  Отметим еще раз, что в k­разрядной целочисленной компьютерной арифметике 2k = 0.  Прямой, обратный и дополнительный коды Главная > Представление данных и архитектура ЭВМ > Прямой, обратный и дополнительный коды  Очень часто в вычислениях должны использоваться не только положительные, но и отрицательные  числа.  Число со знаком в вычислительной технике представляется путем представления старшего разряда  числа в качестве знакового. Принято считать, что 0 в знаковом разряде означает знак «плюс» для  данного числа, а 1 – знак «минус». Выполнение арифметических операций над числами с разными знаками представляется дляаппаратной части довольно сложной процедурой. В этом случае нужно определить большее по  модулю число, произвести вычитание и присвоить разности знак большего по модулю числа. Применение дополнительного кода позволяет выполнить операцию алгебраического суммирования и  вычитания на обычном сумматоре. При этом не требуется определения модуля и знака числа. Прямой код представляет собой одинаковое представление значимой части числа для  положительных и отрицательных чисел и отличается только знаковым битом. В прямом коде число 0 имеет два представления «+0» и «–0». Обратный код для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных  чисел образуется из прямого кода положительного числа путем инвертирования всех значащих  разрядов прямого кода. В обратном коде число 0 также имеет два представления «+0» и «–0». Дополнительный код для положительных чисел имеет тот же вид, что и прямой код, а для  отрицательных чисел образуется путем прибавления 1 к обратному коду. Добавление 1 к обратному  коду числа 0 дает единое представление числа 0 в дополнительном коде. Однако это приводит к  асимметрии диапазонов представления чисел относительно нуля. Так, в восьмиразрядном  представлении диапазон изменения чисел с учетом знака. Таблица прямого, обратного и дополнительного кода 4­битных чисел. ­128 <= x <= 127. Число Прямой код Обратный код Дополнительный код ­8 ­7 ­6 ­5 ­4 ­3 ­2 ­1 ­ 1111 1110 1101 1100 1011 1010 1001 ­ 1000 1001 1010 1011 1100 1101 1110 00 10000000 11110000 1 2 3 4 5 6 7 0001 0010 0011 0100 0101 0110 0111 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 Сложение и вычитание чисел со знаком в дополнительном коде Если оба числа имеют n–разрядное представление, то алгебраическая сумма будет получена по  правилам двоичного сложения (включая знаковый разряд), если отбросить возможный перенос из  старшего разряда. Если числа принадлежат диапазону представимых данных и имеют разные знаки, тосумма всегда будет лежать в этом диапазоне. Переполнение может иметь место, если оба cлагаемых  имеют одинаковые знаки. Пример 1: 6 – 4 = ? 6 – положительное число с кодом 0110 –4 – отрицательное число с дополнительным кодом 1100 (перенос игнорируется): 6 – 4 = 2. Пример 2: –5 + 2 = ? 2 – положительное число с кодом 0010 –5 – отрицательное число с дополнительным кодом 1011 Число с кодом 1101 является отрицательным, модуль этого числа имеет код 00112 = 310. Как получить дополнительный код? Давайте посмотрим, как получается дополнительный код для двоичной системы счисления. Вначале зададимся разрядностью регистра, в котором будет храниться наше число. Пусть,  для примера, мы будем работать с 8­ми разрядными числами. Возьмем, опять же для  примера, число двенадцать и запишем его в двоичной системе счисления: 1100. Теперь  впишем его в 8­ми разрядный регистр, где старшие, незадействованные в числе, разряды  имеют нулевое значение (нумерация разрядов начинается с нуля).  Разр. 7 6 5 4 3 2 1 0 12  0 0 0 0 1 1 0 0 Такая запись соответствует 8­ми разрядному прямому коду числа двенадцать. А теперь  проинвертируем все разряды регистра, т.е. заменим 0 на 1 и 1 на 0. и получим обратный  код.  Разр.7 6 5 4 3 2 1 0 12обр 1 1 1 1 0 0 1 1 Прибавив к числу в обратном коде единицу, получаем искомый дополнительный код.  (красным цветом показаны переносы в соответствующий разряд) Разр.c 7 6 5 4 3 2 1 0 1 1 12обр 1 1 1 1 0 0 1 1 + 1 12доп 1 1 1 1 0 1 0 0 Попробуем выполнить операцию вычитания нашего числа (двенадцать) из двадцати девяти  с помощью сложения. Для этого впишем двоичное представление числа двадцать девять в8­ми разрядный регистр и прибавим к нему дополнительный код, полученный ранее из  числа двенадцать. Возникающий при этом перенос из самого старшего разряда игнорируем. Разр.c 7 6 5 4 3 2 1 0 1 1 1 1 1 1 29 0 0 0 1 1 1 0 1 12доп 1 1 1 1 0 1 0 0 17 0 0 0 1 0 0 0 1 Мы видим, что результирующая сумма есть двоичное число семнадцать и это  действительно соответствует разности чисел двадцать девять и двенадцать.  Прямой код  Нумерация двоичных чисел в прямом представлении При записи числа в прямом коде (англ. sign­and­magnitude method) старший разряд  является знаковым разрядом. Если его значение равно нулю, то число положительное, если  единице — отрицательное. В остальных разрядах (которые называются цифровыми)  записывается двоичное представление модуля числа. Например, число  типе данных, использующем прямой код, будет выглядеть так:  Таким способом в  ­битовом типе данных можно представить диапазон чисел в восьмибитном  .  .  Достоинства метода:   получить прямой код числа достаточно просто.  Недостатки:    выполнение арифметических операций с отрицательными числами требует  усложнения архитектуры центрального процессора (например, для вычитания  невозможно использовать сумматор, необходима отдельная схема для этого);  существуют два нуля  , из­за чего усложняется арифметическое сравнение.  и  Из­за этого прямой код используется очень редко.  рямой код числа это представление беззнакового двоичного числа. Если речь идет  о машинной арифметике, то как правило на представление числа отводится определенное  ограниченное число разрядов. Диапазон чисел, который можно представить числом  разрядов n равен  Обратный код числа, или дополнение до единицы (one’s complement) это  инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все  нули заменяются на единицы, а единицы на нули.

Посмотрите также