Машинные коды: прямой, обратный, дополнительный.
В двоичной арифметике, как и в обычной, различают положительные и отрицательные числа. В двоичной системе счисления существует три способа представления чисел со знаком.
- представление абсолютной величины и знака отдельно (или прямой код);
- представление отрицательных чисел в дополнительном коде;
- представление отрицательных чисел в обратном коде.
В прямом коде старший разряд кодирует знак числа, а остальные – модуль числа. Условно принято знак “+” обозначать 0 и знак “-” - 1. Например, число +10 в прямом коде будет представляться как 01010пк, а -10 11010пк.
В дополнительном коде положительное число кодируется также как и в прямом, а чтобы представить отрицательное число в дополнительном коде, необходимо записать n-битный модуль этого числа, поменять в нем нули на единицы, единицы на 0 и добавить единицу к самому младшему разряду.
Пример: представить число -10 в дополнительном коде.
Двоичный эквивалент +10 = 01010пк.
Дополнительный код получается следующим образом:
10101
+
1
10110дк = -10
Можно предложить второй способ перехода к дополнительному коду: необходимо записать n-битный модуль этого числа, оставить без изменения все нули в младших разрядах и первую младшую единицу, а остальные разряды проинвертировать.
Пример: представить число -50 в дополнительном коде.
Двоичный эквивалент +50 = 00110010пк.
Дополнительный код получается следующим образом: 11001110дк, а по первому правилу:
11001101
+
1
11001110дк = -50
Упражнение: представить число -33 в дополнительном коде. Должно получиться 1|1011111дк.
Получить дополнительный код отрицательного числа Х можно по третьему правилу: Хдк=2n-|X|, где n – длина машинного слова.
Пример: представить число -50 в дополнительном коде (где n =8).
2n=28=64=1000000002
|X|=50=1100102
100000000
- 110010
11001110дк
Из правил можно сделать вывод, что положительные числа в случае увеличения числа разрядов дополняются слева нулями, а отрицательные – единицами.
Обратный код двоичного числа образуется по следующему правилу: обратный код положительного числа совпадает с их прямым кодом, а чтобы представить отрицательное число в обратном коде, необходимо заменить все 1 на 0, а все 0 на 1 и поместить 1 в знаковый разряд.
Пример, возьмем то же самое число -10. Двоичный эквивалент +10 = 01010пк, откуда получаем обратный код -10: 10101ок.
Необходимо отметить, что для положительных чисел прямой, обратный и дополнительный коды совпадают, а для отрицательных - нет.
Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины происходит обратное преобразование в отрицательные десятичные числа.
Как известно все математические операции в процессоре сводятся к операциям сложения, сдвига кода и логическим операциям. Использование дополнительного и обратного кодов позволяет заменить вычитание, умножение, деление на используемые операции.
