Информатика. Технические средства
66
При умножении знаковых чисел в компьютере используют два ва-
рианта. Первый заключается в том, что находятся модули чисел, от-
дельно запоминается их знак, потом модули чисел перемножаются,
и затем произведению присваивается нужный знак, в зависимости от
знаков сомножителей. Конечно, наличие дополнительного кода услож-
няет процедуру умножения, но тот выигрыш, который получается при
использовании операции сложения, все равно вес
ьма высок, поэтому от
дополнительного кода в представлении чисел еще не отказались.
Второй вариант умножения – найти произведение двоичных зна-
ковых чисел в дополнительных кодах. При этом необходимо ввести по-
правку на результат, которая зависит от того, какие числа участвуют
в операции умножения.
Проведем эксперимент. Попробуем умножить два знаковых целых
числа по правилам умножения беззнаковых целых чисел.
В двоичном
представлении
Беззнаковые
числа
Знаковые
числа
×
11111111
×
255
×
–1
11111111 255 –1
1111111000000001 65025 –511
Можно сделать вывод, что правило умножения для беззнаковых
целых чисел напрямую не подходит для знаковых чисел, представлен-
ных в дополнительном коде. Следовательно, просто переносить метод
умножения беззнаковых чисел на знаковые нельзя.
Рассмотрим, что можно сделать в этом случае. Для этого восполь-
зуемся полученными знаниями о представлении чисел в дополнитель-
ном коде. Пусть це
лые двоичные сомножители X и Y представлены
в дополнительном коде в n-разрядном формате, старший разряд которо-
го используется для представления знака. Произведение записывается
в слово, длина которого вдвое больше, чем длина сомножителей. При
умножении этих чисел возможны четыре ситуации:
1. X > 0, Y > 0. Так как D(X, n) = X и D(Y, n) = Y, то D(X·Y, n) = X·Y,
т. е. резул
ьтат умножения совпадает с произведением беззнаковых чисел.
2. X < 0, Y > 0. Согласно формуле для дополнения числа D(X < 0, n) =
= 2
n
–
, и произведение, полученное методом умножения беззнаковых
чисел, – псевдопроизведение – равно
(,) 2
n
Xn Y Y X Y
=⋅− ⋅
. Правильный
же результат в дополнительном коде равен
2
(0,)2
n
XY n X Y
<=−⋅
.
Очевидно, что для получения правильного результата из псевдопроиз-
ведения необходимо к последнему прибавить 2
2n
и вычесть множитель
n
2⋅ , то есть вычесть множитель, сдвинутый влево на n разрядов. Эта