В итоге получается
С помощью этих кодов упрощается операция алгебраического сложения (вычитания). Она сводится к операции простого сложения, что не вызывает затруднения. Применение кодов упрощает определение знака результата, и признака переполнения разрядной сетки.
Для обозначения знака числа в каждом из перечисленных кодов выделяется специальный знаковый разряд. Он всегда представляется первым слева от цифровых разрядов в разрядной сетке и играет роль старшего разряда числа. Если число положительное, то в этом (знаковом) разряде записывается нуль, если число отрицательное, то в нем записывается единица.
Прямой код
Прямой код двоичного числа содержит цифровые разряды, слева от которых записывается знаковый разряд, который выполняет не роль знака, а роль значащей цифры числа. Например, целое положительное двоичное число х=+11010 в прямом коде будет иметь вид = 011010, а отрицательное число у=–10011 будет иметь вид = 110011. В этих кодах знаковые разряды играют роль значащих цифр.
Обратный код
Обратный код образуется из прямого кода путем замены единиц и нулей в цифровых разрядах на их противоположные значения, то есть единицы заменяются нулями, а нули – единицами. Например, число у= –10011 имеет прямой код = 110011, то его обратный код будет иметь вид =101100. Здесь знаковый разряд не меняет своего значения, а цифровые разряды заменены противоположными значениями.
Дополнительный код
Дополнительный код получается из обратного путем прибавления единицы к младшему разряду.
То есть, если обратный код числа у = –10011 представляет собой
= 101100,
то дополнительный код будет иметь вид
101100
+
1
101101
Использование обратного и дополнительного кода позволяет значительно упростить процесс алгебраического сложения (вычитания) и свести его к простому арифметическому сложению. В этом случае положительное число представляется всегда только в прямом коде, а отрицательное число – либо в обратном, либо в дополнительном коде. Затем производится арифметическое сложение этих кодов, включая и знаковые разряды, воспринимаемые как старшие. В этом случае выполняются следующие правила:
– при использовании обратного кода, возникающая единица переноса из знакового разряда прибавляетсяк младшему разряду суммы,
– при использовании дополнительного кода, возникающая единица переноса отбрасывается.
Например, требуется сложить два числа
х = = и у= .
Прямой код для положительного числа х имеет вид
Прямой код для отрицательного числа у
Обратный код для отрицательного числа у
Дополнительный код для отрицательного числа у
Операция сложения с использованием обратного кода отрицательного числа у.
0110
+
1100
+
1 перенос единицы со знакового разряда с добавлением в младший разряд суммы.
В результате получается
х + у = 0011 =
Операция сложения с использованием дополнительного кода
0110
+
1101
10011
отбрасывание
х + у = 0011= .
Это отвечает истинному результату алгебраического сложения 6 – 3 = 3.
Следует отметить, что если результат сложения положительный (нуль в знаковом разряде), то он воспринимается как прямой код. Если же результат сложения отрицательный (единица в знаковом разряде), то он воспринимается в том коде, в каком было представлено отрицательное число при сложении. Например, необходимо сложить два числа х=и у =. Прямой, обратный и дополнительный код отрицательного числа х имеют вид соответственно , и . Положительное число у используется только в прямом коде .
Алгебраическое сложение с использованием обратного кода отрицательного числа х
1001
0011
.
Здесь полученный результат отрицательный, о чем свидетельствует единица в знаковом разряде. Коль скоро он отрицательный, то его код воспринимается как код отрицательного слагаемого х, то есть обратный. Чтобы перевести результат в обратном коде в десятичную систему счисления, необходимо обратный код перевести в прямой, затем в двоичный, а потом в десятичный код.
Алгебраическое сложение с использованием дополнительного кода отрицательного числа х.
1010
0011
Здесь отрицательное слагаемое х использовано в дополнительном коде, поэтому и результат воспринимается в дополнительном коде. Путь перевода результата в десятичную систему счисления аналогичен предыдущему случаю.
Следует иметь в виду, что для заданной длины разрядной сетки, дополнительным кодом представляется на единицу больше отрицательных чисел, чем положительных. Например, в 8-разрядной сетке можно представить наибольшее положительное число +127 в прямом коде как 01111111 и наименьшее отрицательное число –128 в дополнительном коде как 10000000. По этим причинам для представления отрицательных чисел в компьютере чаще используется дополнительный код.