информатика_1 / лекции / 11
.pdf
Найдем разность B – A:
Результат отрицательный и получен в дополнительном коде.
Преобразуем результат в прямой код.
1) Преобразование, выполняемое
человеком
Перейдем в обратный код, для этого
вычтем 1:
1 1111100 дополнительный
- 1
__________
1 1111011 обратный
Перейдем в прямой код, для инвертируем все разряды обратного кода кроме знакового:
1 1111011 обратный
1 0000100 прямой
Итак, получен результат -1002 = -410.
2. Преобразование, выполняемое
компьютером
В компьютере преобразование из дополнительного кода в
прямой выполняется иначе, с
применением только сложения и инверсии, что упрощает устройство процессора.
Применяем инверсию, не затрагивая знакового разряда 1 1111100 дополнительный
1 0000011 промежуточный код
Прибавляем единицу
1 0000011 + 1
__________
1 0000100
Получен тот же результат -1002 = -410.
Найдем произведение A B, для ускорения процесса перемножения поменяем местами сомножители и вычислим B A:
Двоичные разряды произведения. вышедшие за пределы восьмиразрядной сетки,
отбрасываются. В результате
получим двоичное число 11111100.
Результат отрицательный и равен (после перевода в прямой код) - 410,
против ожидаемого 102010.
Правильный результат в этом случае получится в том случае, если для
результата будет выделено по
крайней мере 16 двоичных разрядов.
В компьютерах умножение производится как последовательность сложений и сдвигов. Для этого в АЛУ имеется регистр, называемый
накапливающим сумматором, который до начала выполнения операции содержит число ноль. В процессе выполнения операции в нем поочередно размещаются множимое и результаты промежуточных сложений, а по завершении операции — окончательный результат.
Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель.
Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока
не достигнет нулевого значения.
Пример. Умножим 1100112 на 1011012:
Сумматор Множитель
000000000000 101101 + 110011
____________
000000110011
101100 (сдвиг на 2 позиции влево)
+ 110011
____________
11111111
Сумматор |
Множитель |
11111111 |
101000 |
+ 110011 |
(сдвиг еще на 1 позицию |
____________ |
влево) |
1010010111 |
100000 |
+110011 |
(сдвиг еще на 2 позиции |
____________ |
влево) |
100011110111 |
000000 |
