- •Д.В. Топольский, и.Г. Топольская Арифметические и логические основы микропроцессорной техники
- •Предисловие
- •Введение
- •1. Формы представления чисел
- •2. Двоичная система счисления
- •3. Восьмеричная система счисления
- •4. Шестнадцатеричная система счисления
- •5. Двоично-десятичные числа
- •6. Двоичная арифметика
- •7. Арифметика в обратном и дополнительном кодах
- •8. Математическая логика
- •Ответы к упражнениям
7. Арифметика в обратном и дополнительном кодах
Рассмотренные арифметические операции над двоичными числами могут быть сведены к выполнению лишь двух операций; сложения и сдвига. Для этой цели в ЭВМ применяются специальные коды: прямой, обратный и дополнительный.
Для обозначения знака числа, участвующего в операции, в этих кодах выделяется специальный знаковый разряд, в котором записывается 0 для положительного числа и 1 — для отрицательного. Знаковый разряд всегда располагается слева от цифровых разрядов, представляющих данное число.
Прямой код хпр двоичного числа х содержит цифровые разряды этого числа, слева от которых записывается знаковый разряд. Например, для числа х = + 1011 прямой код будет хпр = 0.1011, а для числа х = – 1011 прямой код хпр = 1.1011.
Использование обратного и дополнительного кодов позволяет свести операцию вычитания (алгебраического сложения) чисел к простому арифметическому сложению. Записи положительных чисел в обратном и дополнительном кодах совпадают с их соответствующими записями в прямом коде. Для рассмотренного ранее примера х = + 1011 имеем:
хпр = хобр = хдоп = 0.1011.
Отрицательные числа в этих кодах представляются по-разному.
Обратный код хобр отрицательного числа x получается из прямого кода путем замены значений цифровых разрядов на противоположные. В знаковом разряде, как в прямом коде отрицательного числа, записывается 1. Например, если
x = – 1011, то хпр = 1.1011; хобр = 1.0100.
Дополнительный код хдоп отрицательного числа x образуется из его обратного кода хобр путем прибавления 1 к младшему цифровому разряду. Для предыдущего примера: хобр = 1.0100; хдоп = 1.0101.
В процессе прибавления 1 к младшему разряду могут возникнуть переносы из данного разряда в следующий. Если эта 1 переноса достигает знакового разряда и вызывает соответствующий перенос из него, то при использовании дополнительного кода последний перенос отбрасывается, а при использовании обратного кода единица знакового переноса суммируется с младшим разрядом полученной суммы. Результат вычислений получается в том коде, в каком были представлены слагаемые. Например,
десятичный код: |
обратный код: |
дополнительный код: |
|||
– |
12 |
+ |
0.1100 |
+ |
0.1100 |
5 |
1.1010 |
1.1011 |
|||
|
7 |
1 0.0110 |
1 0.0111 |
||
|
|
|
|||
|
0.0111 |
0.0111 |
В процессе выполнения расчетов на ЭВМ может образоваться как «положительный», так и «отрицательный» нуль, причем только в дополнительном коде он имеет единственное представление. Действительно,
в прямом коде: |
|
(+ 0)пр = 0.00...00; |
(– 0)пр = 1.00...00; |
в обратном коде: |
|
(+ 0)обр = 0.00...00; |
(– 0)обр = 1.11...11; |
в дополнительном коде: |
|
(+ 0)доп = 0.00...00; |
(– 0)доп = 0.00...00. |
По этой причине, в частности, для представления отрицательных чисел в ЭВМ обычно используется дополнительный код. Поскольку дополнительный код положительного числа совпадает с прямым кодом, то положительные числа участвуют в операциях по сути дела в прямом коде. Как уже отмечалось, использование дополнительных кодов для отрицательных чисел позволяет свести операцию вычитания (или алгебраического сложения) к простому арифметическому суммированию кодов, включая их знаковые разряды. Если в результате суммирования получается положительное число (0 в знаковом разряде), то оно представлено в прямом коде, а если отрицательное число (1 в знаковом разряде), то — в дополнительном коде.
Упражнения
Выполнить арифметические операции со следующими десятичными числами, используя метод дополнительного кода:
а) 7 + 1; б) 31 + 26; в) 8 – 5; г) 89 – 46; д) 1 – 6; е) 20 – 60;
ж) – 3 – 4; з) – 13 – 41; и) 7 – 2; к) 113 – 50; л) 3 – 8; м) 12 – 63.