Прямой и обратный код двоичного числа

Прямой и обратный код двоичного числа

Статья рассказывает о трех основных методах представления и операций с числами в компьютерных системах: прямом коде, обратном коде и дополнительном коде.

Простыми словами о прямом, обратном и дополнительном кодах: что это такое и зачем они нужны обновлено: 29 сентября, 2023 автором: Научные Статьи.Ру

Помощь в написании работы

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

Нужна помощь в написании работы?

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

Прямой код

Прямой код — способ представления двоичных чисел с фиксированной запятой. Главным образом используется для записи неотрицательных чисел

Прямой код используется в двух вариантах.
В первом (основной) — для записи только неотрицательных чисел:

Прямой и обратный код двоичного числа

В этом варианте (для восьмибитного двоичного числа) мы можем записать максимальное число 255 (всего чисел 256 — от 0 до 255)

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

Знаковый разряд прямого кода

В этом случае диапазон десятичных чисел, которые можно записать в прямом коде составляет от — 127 до +127:

Двоичные числа в прямом коде

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

Обратный код

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

Лекция 303. Признак переполнения

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

При 8-битном двоичном числе — знаковый бит (как и в прямом коде) старший (8-й)

Двоичное число в обратном коде

Диапазон десятичных чисел, который можно записать в обратном коде от -127 до + 127

Арифметические операции с отрицательными числами в обратном коде:

1-й пример (для положительного результата)
Дано два числа:
100 = 0110 0100
-25 = — 0001 1001
Необходимо их сложить:
100 + (-25) = 100 — 25 = 75

1-й этап
Переводим число -25 в двоичное число в обратном коде:
25 = 0 001 1001
-25= 1 110 0110
и складываем два числа:
0 110 0100 (100) + 1 110 0110 (-25) = 1 0 100 1010, отбрасываем старшую 1 (у нас получился лишний 9-й разряд — переполнение), = 0 100 1010
2-й этап
Отброшенную в результате старшую единицу прибавляем к результату:
0 100 1010 + 1 = 0 100 1011 (знаковый бит = 0 , значит число положительное), что равно 75 в десятичной системе

2-й пример (для отрицательного результата)
Дано два числа:
5 = 0000 0101
-10 = — 0000 1010
Необходимо их сложить:
5 + (-10) = 5 — 10 = -5

1-й этап
Переводим число -10 в двоичное число в обратном коде:
10 = 0 000 1010
-10= 1 111 0101
и складываем два числа:
0 000 0101 (5) + 1 111 0101 (-10) = 1 111 1010 (знаковый бит = 1 , значит число отрицательное)

2-й этап
Раз результат получился отрицательный, значит число представлено в обратном коде.
Переводим результат в прямой код (путем инвертирования значения, знаковый бит не трогаем):
1 111 1010 —-> 1 000 0101
Проверяем:
1 000 0101 = — 0000 0101 = -5

Обратный код решает проблему сложения и вычитания чисел с различными знаками, но и имеет свои недостатки:
— арифметические операции проводятся в два этапа
— как и в прямом коде два представления нуля — положительный и отрицательный

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

Очень часто в вычислениях должны использоваться не только положительные, но и отрицательные числа.

Число со знаком в вычислительной технике представляется путем представления старшего разряда числа в качестве знакового .

Принято считать, что 0 в знаковом разряде означает знак «плюс» для данного числа, а 1 – знак «минус».

Число со знаком в 8-битной разрядной сетке

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

Применение дополнительного кода позволяет выполнить операцию алгебраического суммирования и вычитания на обычном сумматоре. При этом не требуется определения модуля и знака числа.

Прямой код представляет собой одинаковое представление значимой части числа для положительных и отрицательных чисел и отличается только знаковым битом. В прямом коде число 0 имеет два представления «+0» и «–0».

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

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

Так, в восьмиразрядном представлении диапазон изменения чисел с учетом знака.

Таблица прямого, обратного и дополнительного кода 4-битных чисел. Для наглядности представления всего диапазона чисел примем, что сетка представления чисел 4-разрядная, где старший разряд (3) — знаковый, а 0-2 разряды содержат значение числа.

ЧислоПрямой кодОбратный кодДополнительный код
-81000
-7111110001001
-6111010011010
-5110110101011
-4110010111100
-3101111001101
-2101011011110
-1100111101111
0
0
1000
0000
1111
0000
0000
1000100010001
2001000100010
3001100110011
4010001000100
5010101010101
6011001100110
7011101110111

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

Следует подчеркнуть, что положительные числа в двоичном коде не зависимо от метода их представления, то есть в прямом, обратном или дополнительном кодах, обладают одинаковым видом.

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

  • В основном варианте он служит для записи только неотрицательных чисел. В этом случае для восьми битного двоичного числа может быть записано максимальное число 255 (всего чисел 256, то есть, от нуля до 255).
  • Во втором варианте он служит для записи как положительных, так и отрицательных чисел.

Во втором случае старший бит принято считать знаковым разрядом (знаковым битом). Причём, если:

  • Знаковый разряд равняется нулю, то число является положительным.
  • Знаковый разряд равняется единице, то число является отрицательным.

В таком варианте диапазон десятичных чисел, которые могут быть записаны в прямом коде, составляет от — 127 до +127.

Начинай год правильно
Выигрывай призы на сумму 400 000 ₽

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

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

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

Для отрицательных чисел обратный код может быть получен из неотрицательного числа в прямом коде, путем инвертирования всех битов, то есть, единицы заменяются нулями, а нули должны быть заменены на единицы. Для преобразования отрицательного числа, которое записано в обратном коде, в положительное необходимо просто выполнить его инвертирование. Для восьми битного двоичного числа знаковым битом, как и в прямом коде, является старший, то есть, восьмой бит. Диапазон десятичных чисел, которые могут быть записаны в обратном коде, простирается от -127 до + 127. Ниже приведены примеры записи чисел в обратном коде.

Примеры записи чисел в обратном коде. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Примеры записи чисел в обратном коде. Автор24 — интернет-биржа студенческих работ

Далее рассмотрим выполнение арифметических операций с отрицательными числами в обратном коде (арифметические операции с двоичными числами).

Имеем следующие два числа:

Необходимо выполнить их сложение, которое в десятичном формате имеет общеизвестный вид:

100 + (–25) = 100 — 25 = 75

Для реализации этой операции в двоичных кодах, необходимо сначала выполнить перевод числа -25 в двоичное число в обратном коде:

Затем необходимо осуществить собственно операцию сложения двух чисел:

0110 0100 (100) + 1110 0110 (–25) = 1 0100 1010.

Старший единичный разряд необходимо отбросить, так как получился лишний девятый разряд, как результат переполнения:

Далее отброшенную в результате старшую единицу следует прибавить к результату:

0100 1010 + 1 = 0100 1011.

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

Обратный код способен решить проблему сложения и вычитания чисел с разными знаками, но также и обладает определёнными недостатками:

  1. Для выполнения арифметических операций необходимо осуществить два этапа.
  2. Как и для прямого кода существует два представления нуля, а именно, положительный и отрицательный.

Дополнительный код является самым распространенным способом представления отрицательных чисел. Он предоставляет возможность замены операции вычитания операцией сложения, а также позволяет сделать операции сложения и вычитания одинаковыми для знаковых и без знаковых чисел.

Дополнительный код, аналогично прямому и обратному кодам, использует старший разряд для обозначения знака числа, то есть, этот разряд является знаковым битом. Диапазон десятичных чисел, которые могут быть записаны в дополнительном коде, простирается от -128 до +127. Запись положительных двоичных чисел в дополнительном коде выполняется так же, как и в прямом и обратном кодах.

Дополнительный код отрицательного числа может быть получен следующими способами:

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

Двоичное вычитание

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

begin</p><p> _0 _1 _1 _? underline \ 0 1 0 /p><p> 0 1 getstext< изменение уменьшаемого в результате займа>\ _1 0 0 =33\ 1 1 =11\ cline 0 0 1 getstext< разность=22>\ end

begin</p><p> 0 0 1 gets text\ _1 1 0 =40\ 1 1 =27\ cline 0 1 0 gets text< >разность=13\ end

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

Двоичная арифметика с учетом знаков чисел

В двоичном коде знак числа представляет собой разряд, приписываемый слева от значащих разрядов числа. Знак » +» обозначается логическим 0, знак » -» — логической 1. Для наглядности все примеры будем рассматривать для целых чисел, отделяя знаковый разряд точкой.

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

Так, в восьмиразрядном формате

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

Для того же числа обратный код имеет вид: (+ 10) = 0.0001010, (-10)=1.1110101.

Недостатком обратного кода является то, что одно и то же число (+0)и (-0)записывается по-разному: (+ 0) = 0.0000000, (-0)=1.1111111, что может вызвать нежелательное разночтение работы логической схемы. Поэтому предпочтительным является дополнительный код.

Дополнительный код (ДК) для положительных чисел совпадает с обратным и прямым, т.е. к значащим разрядам приписывается знаковый разряд. Для отрицательных чисел дополнительный код на 1 больше, чем обратный. После образования значащих разрядов приписывается знаковый разряд.

Для значащих разрядов отрицательного числа справедлива формула:

ДК=ОК+1.( 11.3)

(-0)

Напишем число в 7-разрядном дополнительном коде:

begin</p><p> _< >0 0 0 0 1 1 1 gets ОК \ 1 fbox 0 0 0 gets ДК \ end

(+0)=(-0)

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

Рассмотрим образование дополнительного кода для числа 10. Для положительного числа (+ 10) = 0.0001010, а для отрицательного числа (-10) дополнительный ко д получается следующим образом:

begin</p><p> _< >0 0 0 0 1 0 0 gets ОК\ 1 1. 1 0 1 gets ДК end

Для замены вычитания сложением применяется и обратный, и дополнительный коды, при этом в каждом из них действуют свои правила.

Прямой код двоичного числа

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

Примеры прямого кода для правильных дробей:

Примеры прямого кода для целых чисел:

Представление чисел в прямом коде имеет существенный недостаток — формальное суммирование чисел с различающимися знаками даёт неверный результат. Пример — сложение двух чисел и . В прямом коде эти числа имеют вид: и . Очевидно, что результат должен быть равен -2, что в прямом коде может быть записано как 1.010. В то же время при непосредственном сложении получаем

то есть значение, существенно отличающееся от ожидаемого.

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

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

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

Обратный код двоичного числа

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

Примеры обратного кода для правильных дробей:

Примеры обратного кода для целых чисел:

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

Хотя обратный код и позволяет решить проблему сложения и вычитания чисел с различными знаками, он имеет и недостатки. Во-первых, процесс суммирования чисел является двухэтапным, что увеличивает время выполнения этой операции. Во-вторых, как и в прямом коде, в обратном — два представления нуля: и .

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

Все операции над числами в памяти компьютера выполняются не над самими числами, а над их машинными кодами .

Рассмотрим получение машинного кода целого положительного числа.
Предположим, что мы имеем дело с шестнадцатиразрядной сеткой. Вычислим диапазон целых чисел, которые можно представить. A min = 0 для целого положительного числа, а A max вычислим по формуле:

A max = 2 16 – 1 ; A max = 65535 .
Пример (1)

Запиши машинный код целого положительного числа (547) в шестнадцатиразрядной сетке.
1. Переведём число в двоичную систему счисления:
547 10 = 1000100011 2 .
2. Дополним недостающие разряды незначащими нулями для заполнения сетки:

A = 0000001000100011 2 .

3. Машинный код числа принято представлять в шестнадцатеричной системе счисления, так людям его удобнее воспринимать: K A = 0223 .

Ответ: K A = 0223 .
Такой код принято называть прямым кодом числа и обозначать [ K A ] ПК .

Рассмотрим получение машинного кода целого отрицательного числа.
Предположим, что мы имеем дело с шестнадцатиразрядной сеткой. Один из разрядов сетки, а именно самый старший разряд, будет отведён под хранение знака. Таким образом, для хранения самого числа у нас остаётся (15) разрядов. Вычислим диапазон целых чисел, которые можно представить. A min = − 2 15 = − 32768 для целого положительного числа, а A max вычислим по формуле:

A max = 2 15 – 1 ; A max = 32767 .

Обрати внимание: если мы сложим A min и A max , то получим (65535). То есть диапазон представляемых чисел не изменился.

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

Для получения дополнительного кода используется следующий алгоритм:

1. получить двоичное представление модуля отрицательного числа.
2. Инвертировать все разряды полученного двоичного числа.
3. Прибавить к инвертированному числу (1).

Оцените статью
TutShema
Добавить комментарий