Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебное пособие по А и ЛО ВТ.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
4.87 Mб
Скачать

Умножении целых чисел в дополнительных кодах

При представлении целых чисел в дополнительном коде знаковый разряд входит в число n разрядов. Следовательно, при умножении целых чисел (в отличие от дробных) в дополнительных кодах знаковый разряд участвует в умножении наряду со значащими. То есть умножение ведется на [Mт]доп , а не на Мт.

1) Mн > 0,

Mт > 0.

Как отмечалось выше, в этом случае умножение выполняется по правилам умножения чисел в прямых кодах.

2) Мн>0,

Mт<0,

[Мт]доп = 2n – Мт.

Т ак как сомножители имеют разные знаки, то произведение Мн∙Мт<0, сле­довательно, [Mн∙Мт]доп=22n - Mн∙Мт. Однако при умножении Мн∙[Мт]доп получается Mн ∙(2n-Mт) =2n Mн - Mн∙Мт. Следовательно, погрешность в этом случае равна Δ = 22n–Mн∙Мт–2n Mн+Mн∙Мт = 22n–2n Mн = [–Мн]доп∙22n = [ [Мн]доп]доп∙22n.

Пример: Mн = +110

Mт = -101

[Mн]доп = 0.110

[Mт]доп = 1.011

= [- Mн]доп = 1.010

0.000

+ 0.110 = Mн∙b4

0.110

0.011 0 ∙2-1

+ 0.110 = Mн∙b3

1.001 0 (возникло переполнение)

0.100 10 ∙2-1 (коррекция)

0.010 010 ∙2-1

+ 0.110 = Mн∙b1

1.000 010 (возникло переполнение)

0.100 0010 ∙2-1 (коррекция)

+ 1.010 (поправка)

1.110 0010 [MнMт]доп

- 001 1110 MнMт

3) Мн<0,

Мт>0.

Здесь, как и при умножении дробных чисел, возможны два случая:

a) с вводом поправки в получаемое произведение

[Мн]доп = 2n – Mн.

Как и ранее, требуется получить [Мн∙Мт]доп= 22n - Мн∙Мт. Получаем

(2n - Мн) ∙ Мт = 2n ∙ Мт - Мн∙Мт.

= 22n - Мн∙Мт - 2n ∙ Мт + Мн∙Мт = 2n(2n - Мт) = [-Мт]доп ∙ 2n ;

б) вариант без ввода поправки рассмотрим применительно к алгоритму умножения Г (как и ранее это справедливо и для других алгоритмов):

Mн∙Mт = A∙B = [A ∙ b1 ∙ 2-1 ]доп + [A ∙ b2 ∙ 2 -2]доп+- ... + [A ∙ bn ∙ 2-n]доп=

=[A ∙ b1 ∙ 2-1 + A ∙ b2 ∙ 2 –2 +- ... + A ∙ bn ∙ 2-n]доп=[Мн∙Мт]доп.

Пример: Мн = -110 Мт = 101 [Мн]доп = 1.010

[Мт]доп = 0.101

b1 ... b4

0.0000000

+ 0.0000000 = [MH ∙ b1]доп ∙ 2-1

0.0000000

+ 1.1101000 = [MH ∙ b2]доп ∙ 2-2

1.1101000

+ 1.1111010 = [MH ∙ b4]доп ∙ 2-4

1.1100010

4) Mн < 0

Mт < 0

При этом сочетании знаков сомножителей в результате должно быть получено:

[Mн]доп = 2n – Mн,

[Mт]доп = 2n – Mт,

Mн ∙Mт = 22n - [Mн Mт]доп.

При умножении [Mн]доп∙[Mн]доп получается:

[Mн]доп∙[Mн]д =[Mн]доп ( 2n - Mт ) = 2n [Mн]доп -

Пример: Мн = -110

Mт = -101

[Mн]доп = 1.010

[Mт]доп = 1. 011

b1 ... b4

= [[Mн]доп]доп= 0.110

При умножении используем алгоритм Г.

0.0000000

1.1010000 = [Mн∙b1]доп∙2-1

1.1010000

1.1110100 = [Mн∙b3] доп∙2-3

1.1000100

1.1111010 = [Mн∙b4] доп∙2-4

1.0111110

0.110 (поправка)

0.0011110 Mн Mт