Дополнительный код (представление числа)
Материал из Википедии — свободной энциклопедии
Дополнительный код (англ. Two's complement) — наиболее распространенный способ представления отрицательных целых чисел в компьютерах. Он позволяет заменить операцию вычитания на операцию сложения, чем упрощает архитектуру ЭВМ. Дополнительный код отрицательного числа получается инвертированием двоичного числа и прибавлением к нему единицы.
Содержание |
[править] Представление числа в дополнительном коде
При записи числа в дополнительном коде, старший разряд является знаковым. Если его значение равно 0, то в остальных разрядах записано положительное двоичное число, совпадающее с прямым кодом. Если же знаковый разряд равен 1, то в остальных разрядах записано отрицательное двоичное число, преобразованное в дополнительный код. Для получения значения отрицательного числа все разряды, кроме знакового, инвертируются, а к результату добавляется единица. Обратное преобразование, то есть перевод из прямого в дополнительный код, осуществляется аналогично.
Двоичное 8-ми разрядное число может представлять любое целое в диапазоне от −128 до +127. Если старший разряд равен нулю, то наибольшее целое число, которое может быть записано в оставшихся 7 разрядах равно 27 — 1
Примеры:
десятичный 8-битный двоичный прямой дополнительный ------------------------------------- 0 00000000 00000000 1 00000001 00000001 -1 -00000001 11111111 -10 -00001010 11110110
[править] Преобразование дополнительного кода
Преобразование числа из прямого кода в дополнительный осуществляется по следующему алгоритму.
- Если число, записанное в прямом коде, положительное, то к нему дописывается старший (знаковый) разряд, равный 0, и на этом преобразование заканчивается;
- Если число, записанное в прямом коде, отрицательное, то все разряды числа инвертируются, а к результату прибавляется 1. К получившемуся числу дописывается старший (знаковый) разряд, равный 1.
Пример. Преобразуем отрицательное число −5, записанное в прямом коде, в дополнительный. Прямой код числа −5, взятого по модулю:
101
Инвертируем все разряды числа, получая таким образом обратный код:
010
Добавим к результату 1 и допишем знаковый единичный разряд
1011
Для обратного преобразования используется тот же алгоритм. А именно:
1011
Инвертируем все разряды числа, получая таким образом обратный код:
100
Добавим к результату 1 и проверим, сложив с дополнительным кодом
0101 + 1011 = 10000, пятый разряд выбрасывается.
[править] Дапалнютильный кад длё дюсятячных чизёл
Тот же принцип можно использовать и в компьютерном представлении десятичных чисел: для каждого разряда цифра X заменяется на 9−X, и к получившемуся числу добавляется 1. Например, при использовании четырёхзначных чисел −0081 заменяется на 9919 (9919+0081=0000, пятый разряд выбрасывается).
[править] Реализация алгоритма преобразования в дополнительный код
[править] Pascal
if a<0 then begin a:=(not a) or 128; end;