(-b7) b6 b5 b4 b3 b2 b1 b0.
Определим, что в этом коде представляет, например, двоичное число 11001101В:
-1×27 + 1×26 +0×25 + 0×24 + 1×23 + 1×22 + 0×21 + 1×20 =
= -128 + 64 + 8 + 4 + 1 = -51D.
Итак, исходное двоичное число 11001101В в дополнительном коде – это отрицательное число -51. А двоичное число 01001101В – это
-0×27 + 1×26 +0×25 + 0×24 + 1×23 + 1×22 + 0×21 + 1×20 =
= 64 + 8 + 4 + 1 = 77D
число положительное. Следовательно, единица в старшем разряде числа говорит о том, что число отрицательное, а ноль – что число положительное. Таким образом в дополнительном коде восемью двоичными разрядами можно представить числовой ряд от -128до +127:
10000000 |
-128 |
10000001 |
-127 |
10000010 |
-126 |
. . . |
. . . |
11111110 |
-2 |
11111111 |
-1 |
00000000 |
0 |
00000001 |
1 |
00000010 |
2 |
. . . |
. . . |
01111110 |
126 |
01111111 |
127. |
Из приведенного примера видно, во-первых, что модуль числа определяется семью младшими разрядами, а не всеми восемью, как в прямом коде, а во-вторых, что дополнительный код положительного числа совпадает с его прямым кодом. Следовательно, в дополнительном коде целесообразно представлять отрицательные числа.
Перевод числа в дополнительный код осуществляется в несколько этапов:
1. На первом этапе (если это требуется) модуль отрицательного числа представляется в прямом двоичном коде;
2. На втором этапе полученное двоичное число представляется в обратном (инверсном) коде – единицы заменяются нулями, нули – единицами;
3. На третьем этапе к полученному числу в инверсном коде прибавляется единица. Получившееся в результате двоичное число и есть дополнительный код исходного числа.
В качестве примера представим в дополнительном коде число минус 9:
прямой двоичный код числа 9: |
00001001 |
|
инверсия: |
11110110 |
|
прибавление единицы: |
+1 |
|
дополнительный двоичный код числа -9: |
11110111. |
Единица в старшем разряде получившегося результата говорит о том, что число отрицательное. Кстати, после выполнения арифметических операций с числами с разными знаками, могут возникнуть трудности с определением модуля получившегося отрицательного числа (при положительном результате, то есть, когда в старшем разряде 0, таких трудностей не возникает, так как получается прямой двоичный код числа). Чтобы не расписывать все возможные двоичные коды отрицательных чисел (при использовании восьмиразрядной сетки – это, как показано выше, 128 чисел, а при использовании шестнадцатиразрядной сетки – 32768 чисел), достаточно получить дополнительный код отрицательного числа (то есть, проделать то же самое с полученным результатом). В результате получится прямой двоичный код, по которому просто определить модуль числа.
Таким образом, представление двоичного числа в дополнительном коде меняет его знак на обратный, а также изменяет содержимое разрядов числа таким образом, что операция вычитания двоичных чисел заменяется операцией сложения. Операция сложения очень проста с точки зрения двоичной арифметики, к тому же очень просто реализуется схемным путем (поэтому-то операция сложения у большинства микропроцессоров – одна из самых «быстрых»). Большинство микропроцессоров не приспособлены для прямого вычитания двоичных чисел, и операция вычитания заменяется операциями перевода вычитаемого в дополнительный код и операцией сложения этого кода с прямым кодом уменьшаемого.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.