Для представления отрицательных целых чисел используется дополнительный код.
Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.
Получить дополнительный код можно следующим путем:
записать внутреннее представление положительного числа X;
записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
к полученному числу прибавить 1
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
-
00000000 00000000 00010101 1111110 -
11111111 11111111 11101010 00000011 -
11111111 11111111 11101010 00000100
Шестнадцатеричная форма результата:
FF FF ЕА 04.
Старший разряд в представлении любого отрицательного числа равен 1. Следовательно, он указывает на знак числа и поэтому называется знаковым разрядом.
Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле:
А - В = А + (-В).
Если значение (-В) будет иметь форму дополнительного кода, то в памяти ЭВМ получится правильный результат.
Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.
00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 =
1 00000000 00000000 00000000 00000000
Что и требовалось доказать! Единица в старшем разряде, получаемая при сложении, выходит за границу разрядной сетки машинного слова и исчезает.
Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
-
10000000 00000000 00000000 00000000 -
01111111 11111111 11111111 11111111 -
10000000 00000000 00000000 00000000
Полученный код используется для представления значения
-231 = -2147483648.
Следовательно, диапазон представления целых чисел в 32-разрядном машинном слове:
-231 <= Х <= 231-1,
или
-2147483648 <= Х <= 2147483647.
В общем случае для N-разрядного машинного слова этот диапазон такой:
-2N-1 <= X <= 2N-1-1.
В современных компьютерах часто используется 16- разрядное представление целых чисел. В этом случае их диапазон следующий:
-215 <= Х <= 215-1,
или
-32768 <= Х <= 32767.
Выход результатов вычислений за границы допустимого диапазона называется переполнением. Переполнение при вычислениях с фиксированной точкой не вызывает прерывания работы процессора. Машина продолжает считать, но результаты могут оказаться неправильными.
Прямой код отрицательных чисел
Заметим, что ноль имеет два представления в прямом и обратном коде, а в дополнительном коде представление нуля единственно.