Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С. М. Іщеряков комп’ютерна схемотехніка.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
266.35 Кб
Скачать

6.2. Множення, дiлення двiйкових чисел на довiльнi константи

Операцiї зсуву є базовими i в процедурах множення двiйкових змiнних на цiлi константи, значення яких вiдрiзняються вiд цiлої степенi числа 2. Для цього константи представляються сумою цілих степенів двійки наступним чином:

3*X = 2*X + X;

5*X = 4*X + X;

6*X = 4*X +2*X;

...

Легко помiтити, що розкладення констант на цiлi степенi числа 2 при здiйсненнi процедури множення є не чим iншим, як схемою Горнера, що застосовується для представлення двiйкових чисел. Таким чином, множення двiйкової беззнакової змiнної на довiльну цiлу константу здiйснюється згiдно наступного алгоритму:

- константа-множник представляється у двiйковому виглядi, видi-

ляються розряди 2i iз одиничними бiтами,

- змiнна-множник зсувається влiво n-1 разiв, де n - кiлькiсть бiт у двiйковому кодi константи-множника,

- зсунутi значення змiнної, що вiдповiдають одиничним бiтам

двiйкового коду константи, запам'ятовуються та додаються; попередньо перед додаванням всi зсунутi значення змiнної доцiльно представити числами однакової розрядностi шляхом записування необхiдної кiлькостi нульових бiтiв до старших розрядiв.

Вiдмiтимо, що результат множення чисел розрядності n1 та n2 має довжину n1 + n2.

Приклад. Помножити 8-розрядну беззнакову змiнну 10110100 (bin) на константу 92 (dec).

1. Представимо константу 92 (dec) у двiйковiй формi:

92 (dec) = 01011100 (bin).

2. Запишемо значення змiнної-множника 10110100, зсунутi влiво 2,3,4 та 6 разiв, згiдно iз наявнiстю одиничних бiтiв у 2, 3,4 та 6 розрядах константи 92 (dec):

1011010000- зсув змiнної-множника 10110100 влiво на 2 розряди,

10110100000 - зсув змiнної-множника 10110100 влiво на 3

розряди,

101101000000 – зсув змiнної-множника 10110100 влiво на 4

розряди,

10110100000000 - зсув змiнної-множника 10110100 влiво на 6

розрядiв.

3. Доповнимо нулями старшi розряди перших трьох зсувiв (змiнна-множник є беззнаковою, тому розширення розрядностi проводиться нулями) та додамо чотири зсунутi значення змiнної-множника:

00001011010000

00010110100000

00101101000000

10110100000000

100000010110000 (bin) = 16560 (dec)

4. Перевiримо результат десятковим множенням:

180 dec * 92 dec = 16560 dec.

Вiдмiтимо також, що результат множення 8-розрядної змiнної на 7-розрядну константу має 15 двiйкових розрядiв.

Множення на константи iз дробовою частиною здiйснюється окремо для цiлої та дробової частин константи iз наступним додаванням одержаних добуткiв.

Множення змiнної на дробову частину константи здiйснюється, в цiлому, способом, аналогiчним вищенаведеному:

– дробова константа-множник представляється у двiйковому виглядi, видiляються розряди iз одиничними бiтами,

– змiнна-множник зсувається вправо n - 1 разiв, де n - кiлькiсть бiт у двiйковому кодi дробової константи-множника; молодшi розряди змiнної, якi виходять за межi розрядної сiтки, як правило, не зберiгаються та, в подальшому, втрачаються,

– зсунутi значення змiнної, що вiдповiдають одиничним бiтам двiйкового коду константи, запам'ятовуються та додаються.

Вiдмiтимо, що результат множення змiнної на дробову константу не збiльшує розрядності змiнної.

Приклад. Помножити 8-розрядну беззнакову змiнну 10110100 bin (180 dec) на константу 0,63 dec.

1. Представимо константу 0,63 (dec) у двiйковiй формi довжиною 1 байт:

0,63

1,26

0,52

1,04

0,08

0,16

0,32

0,64

1,28, тобто 0,63 (dec) = 0,10100001 (bin).

2. Запишемо значення змiнної-множника 10110100, зсунутi вправо 1, 3 та 8 разiв, згiдно iз наявнiстю одиничних бiтiв у 1, 3 та 8 розрядах константи 0,63 (dec):

01011010 - зсув змiнної-множника 10110100 вправо на 1 розряд,

00010110 - зсув змiнної-множника 10110100 вправо на 3 розряди

iз втратою молодшого одиничного бiту,

00000000 - зсув змiнної-множника 10110100 влiво на 8 розрядiв.

Вiдмiтимо, що останнiй зсув змiнної на 8 розрядiв супроводжується повним її зникненням, тобто може бути проiгнорованим. Тому у вищенаведеному правилi зсув вправо рекомендується проводити n - 1 разiв.

3. Додамо два зсунутi значення змiнної-множника:

01011010

00010110

───────────────

01110000 (bin) = 112 (dec)

4. Перевiримо результат десятковим множенням:

180 dec * 0,63 dec = 113,4 dec.

Похибка -1,4 виникла за рахунок вiдкидання одиничних молодших бiтiв, що втрачаються при зсувi змiнної вправо за межi розрядної сiтки.

Дiлення на константи Х, якi не дорiвнюють цiлiй степенi числа 2, доцiльно перетворювати у множення на константи, що є оберненими до дiльника - 1/Х.

Приклад. Подiлити 8-розрядну беззнакову змiнну 10110100 bin (180 dec) на константу 11,34 dec.

1. Знайдемо константу Y, обернену до дiльника Х

Y = 1/X = 1 / 11,34 = 0.088 dec.

2. Подальша процедура множення змiнної 10110100 bin на константу 0.088 dec аналогiчна вищенаведенiй (перетворення константи у двiйкову форму, тощо).