(-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).
Ссылка на скачивание - внизу страницы.