Прямой, обратный и дополнительный коды — это методы отображения двоичных чисел, имеющих фиксированную запятую, в компьютерных вычислительных операциях, которые предназначены для представления отрицательных и положительных чисел.
Введение
Прямой, обратный и дополнительный коды двоичных чисел являются способами отображения двоичных чисел, имеющих фиксированную запятую, в компьютерных вычислительных операциях, которые предназначены для представления отрицательных и положительных чисел. Известно, что любые десятичные числа можно представить в двоичном коде. Например, десятичное число 101 в двоичном формате равняется 1100101, или в восьми битном формате это выглядит как 0110 0101. А чтобы представить отрицательные десятичные числа в двоичном виде и обеспечить возможность выполнения с ними арифметических операций, как раз и предназначены различные методы отображения чисел в двоичном коде.
Прямой, обратный и дополнительный коды
Следует подчеркнуть, что положительные числа в двоичном коде не зависимо от метода их представления, то есть в прямом, обратном или дополнительном кодах, обладают одинаковым видом.
Прямой код является методом отображения двоичных чисел с фиксированной запятой, который в основном применяется для записи неотрицательных чисел. Прямой код может применяться в следующих вариантах:
- В основном варианте он служит для записи только неотрицательных чисел. В этом случае для восьми битного двоичного числа может быть записано максимальное число 255 (всего чисел 256, то есть, от нуля до 255).
- Во втором варианте он служит для записи как положительных, так и отрицательных чисел.
Во втором случае старший бит принято считать знаковым разрядом (знаковым битом). Причём, если:
- Знаковый разряд равняется нулю, то число является положительным.
- Знаковый разряд равняется единице, то число является отрицательным.
В таком варианте диапазон десятичных чисел, которые могут быть записаны в прямом коде, составляет от - 127 до +127.
Таким образом, на основании изложенного выше можно сделать вывод, что прямой код может применяться в основном для представления неотрицательных чисел. Применение прямого кода для представления отрицательных чисел считается малоэффективным, поскольку при этом достаточно сложно реализовать арифметические операции и, помимо этого, в прямом коде существует два представления нуля, а именно, положительный нуль и отрицательный нуль (чего не бывает).
Обратный код является способом вычислительной математики, который позволяет осуществить вычитание одного числа из другого, применяя лишь операцию суммирования. Обратный двоичный код положительного числа представляет собой одноразрядный код знака, то есть, двоичного числа нуль, за которым должно следовать числовое значение.
Обратные двоичные коды отрицательных чисел представляет собой одноразрядный код знака, а именно, двоичную цифру единица, за которой должны следовать инвертированные значения положительных чисел. Для положительных чисел обратный код двоичных чисел обладает таким же видом, что и представление неотрицательных чисел в прямом коде.
Для отрицательных чисел обратный код может быть получен из неотрицательного числа в прямом коде, путем инвертирования всех битов, то есть, единицы заменяются нулями, а нули должны быть заменены на единицы. Для преобразования отрицательного числа, которое записано в обратном коде, в положительное необходимо просто выполнить его инвертирование. Для восьми битного двоичного числа знаковым битом, как и в прямом коде, является старший, то есть, восьмой бит. Диапазон десятичных чисел, которые могут быть записаны в обратном коде, простирается от -127 до + 127. Ниже приведены примеры записи чисел в обратном коде.
Рисунок 1. Примеры записи чисел в обратном коде. Автор24 — интернет-биржа студенческих работ
Далее рассмотрим выполнение арифметических операций с отрицательными числами в обратном коде (арифметические операции с двоичными числами).
Имеем следующие два числа:
100 = 0110 0100
–25 = – 0001 1001
Необходимо выполнить их сложение, которое в десятичном формате имеет общеизвестный вид:
100 + (–25) = 100 - 25 = 75
Для реализации этой операции в двоичных кодах, необходимо сначала выполнить перевод числа -25 в двоичное число в обратном коде:
25 = 0001 1001
–25= 1110 0110
Затем необходимо осуществить собственно операцию сложения двух чисел:
0110 0100 (100) + 1110 0110 (–25) = 1 0100 1010.
Старший единичный разряд необходимо отбросить, так как получился лишний девятый разряд, как результат переполнения:
= 0100 1010
Далее отброшенную в результате старшую единицу следует прибавить к результату:
0100 1010 + 1 = 0100 1011.
При этом знаковый бит равняется нулю и это означает, что число является положительным и равным 75 в десятичной системе.
Обратный код способен решить проблему сложения и вычитания чисел с разными знаками, но также и обладает определёнными недостатками:
- Для выполнения арифметических операций необходимо осуществить два этапа.
- Как и для прямого кода существует два представления нуля, а именно, положительный и отрицательный.
Дополнительный код является самым распространенным способом представления отрицательных чисел. Он предоставляет возможность замены операции вычитания операцией сложения, а также позволяет сделать операции сложения и вычитания одинаковыми для знаковых и без знаковых чисел.
Дополнительный код, аналогично прямому и обратному кодам, использует старший разряд для обозначения знака числа, то есть, этот разряд является знаковым битом. Диапазон десятичных чисел, которые могут быть записаны в дополнительном коде, простирается от -128 до +127. Запись положительных двоичных чисел в дополнительном коде выполняется так же, как и в прямом и обратном кодах.
Дополнительный код отрицательного числа может быть получен следующими способами:
- Необходимо выполнить инвертирование значения отрицательного числа, которое записано в прямом коде (знаковый бит сюда не входит), а к полученной инверсии следует прибавить единицу.
- Необходимо выполнить вычитание преобразуемого числа из нуля.