Дополнительный код (представление числа)

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

Представление числа в дополнительном коде

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

Двоичное 8-ми разрядное число может представлять любое целое в диапазоне от −128 до +127. Если старший разряд равен нулю, то наибольшее целое число, которое может быть записано в оставшихся 7 разрядах равно 27 — 1

Примеры:

десятичный      8-битный двоичный 
             прямой     дополнительный
-------------------------------------
  0           00000000    00000000
  1           00000001    00000001
 -1          -00000001    11111111
-10          -00001010    11110110

Преобразование дополнительного кода

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

  1. Если число, записаное в прямом коде, положительное, то к нему дописывается старший разряд, равный 0, и на этом преобразование заканчивается;
  2. Если число, записаное в прямом коде, отрицательное, то все разряды числа инвертируются, а к результату прибавляется 1. К получившемуся числу дописывается старший разряд, равный 1.

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

101 

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

010

Добавим к результату 1 и допишем знаковый единичный разряд

1011

Для обратного преобразования используется тот же алгоритм.

Дополнительный код для десятичных чисел

Тот же принцип можно использовать и в компьютерном представлении десятичных чисел: для каждого разряда цифра X заменяется на 9−X, и к получившемуся числу добавляется 1. Например, при использовании четырёхзначных чисел −0081 заменяется на 9919 (9919+0081=0000, пятый разряд выбрасывается).

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home