Для представления как положительных так и отрицательных чисел используется так называемый дополнительный код –наиболее распространенный способ представления отрицательных целых чисел в компьютерах. Основным достоинством дополнительного кода является то, что в нем единообразно реализуются операции сложения чисел разных знаков (алгебраическое сложение), а операцию вычитания можно свести к операции сложения заменой знака вычитаемого на обратный. Дополнительный код отрицательного числа получается инвертированием двоичного числа и прибавлением к нему единицы (поэтому он и называется дополнительным).
Чтобы увидеть, как получается отрицательное число в дополнительном коде, вычтем из нуля единицу. Вычитание будем производить используя восьмиразрядную решетку:
–-
0
b
b
b
Мы получили число -1 в двоичном дополнительном коде. Чтобы убедится, что это в самом деле -1, сложим это число с 1:
+
1
b
b
b
Как и следовало ожидать мы снова получили 0.
При записи числа в дополнительном коде старший разряд является знаковым. Если его значение равно 0, то в остальных разрядах записано положительное двоичное число. Если же знаковый разряд равен 1, то в остальных разрядах записано отрицательное двоичное число, преобразованное в дополнительный код.
Посмотрим, как представляется первые последовательные числа при переходе через ноль (для чисел записанных в восьмиразрядную решетку):
0000 0000
-1
1111 1111
-2
1111 1110
-3
1111 1101
-4
1111 1100
-5
1111 1011
Для получения значения отрицательного числа все разряды инвертируются, а к результату добавляется единица. Обратное преобразование, то есть перевод из дополнительного в прямой код, осуществляется аналогично.
Получим отрицательное число −5, записанное в дополнительном коде.
Запишем 5 в двоичном виде, дописывая недостающие нули слева:
0000 0101
Инвертируем все разряды числа, получая таким образом обратный код:
1111 1010
Добавим к результату 1, получим искомый результат (−5 в дополнительном коде)
1111 1010 + 1 = 1111 1011
Для обратного преобразования используется тот же алгоритм. А именно:
Инвертируем все разряды числа
0000 0100
Добавим к результату 1 и получим снова положительное число 5