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

6. Зсув. Алгоритми множення та дiлення

6.1. Множення, дiлення двiйкових чисел на 2. Операцiї логiчного та арифметичного зсуву

Проаналiзуємо результат множення на 2 беззнакового двiйкового числа, представленого згiдно правила Горнера:

Хn-1*2n-1 + Xn-2*2n-2 + ... + X1*21 + X0*20) * 2 =

Хn-1*2n + Xn-2*2n-1 + Xn-3*2n-2 + ... + X0*21 + 0*20.

Очевидно, що коефiцiєнти Хi, що множились на 2i у вихiдному множнику, у добутку знаходяться бiля степенiв 2i+1, тобто змiстились на 1 розряд влiво. Наприклад, представимо двiйковим форматом процедуру множення 86 (dec) * 2 = 172 (dec):

0 1 0 1 0 1 1 0 (bin) * 10 (bin) =

/ / / / / / / /

= 0 1 0 1 0 1 1 0 0 (bin).

Таким чином, для множення беззнакового двiйкового числа на 2 необхідно виконати двi операцiї:

  • зсунути всі розряди числа вліво на один розряд,

  • в молодший розряд добутку записати 0.

Аналогiчнi операцiї необхідно здiйснити для ділення двійкового числа на 2:

  • зсунути всі розряди числа вправо на один розряд,

  • в старший розряд частки записати 0.

Вiдмiтимо, що операція множення супроводжується збільшенням розрядності числа, а операція ділення – втратою молодших розрядів.

Процедури множення на 2 беззнакових та знакових чисел є повнiстю аналогiчними.

Приклад. Помножити на 2 беззнакове число 100 (дес.) та знакове число -100 (дес.):

01100100 - двiйкова форма вихідного числа 100 (дес.)

11001000 - зсунуте вліво число iз нулем в молодшому розрядi

( 200 дес.)

1.10011100 - додатковий код вихідного числа -100 (дес.)

1.00111000 - зсунуте вліво число iз нулем в молодшому розрядi

( додатковий код числа -200 (дес.)).

При діленнi на 2 знакових чисел також вiдбувається зсув бiтiв числа вправо, проте до старшого розряду добутку заноситься не нульовий бiт, як для беззнакових чисел, а бiт знаку числа (розширення знаку вправо).

Приклад. Поділити на 2 беззнакове число 100 (дес.) та знакове число -100 (дес.):

01100100 - двiйкова форма вихідного числа 100 (дес.)

00110010 - зсунуте вправо число iз нулем в старшому розрядi

(50 дес.).

1.10011100 - додатковий код вихідного числа -100 (дес.)

1.11001110 - зсунуте вправо число iз бiтом знаку в старшому

розрядi (додатковий код числа -50 (дес.)).

Зсув беззнакових чисел одержав назву логiчного зсуву. Зсув знакових чисел називається арифметичним зсувом. Вiдмiтимо, що логiчний та арифметичний зсуви влiво спiвпадають.

Необхідно звернути увагу на формування похибки при зсуві вправо непарних від’ємних чисел.

Якщо для парних від’ємних двійкових чисел вираз

(-2n) / 2 = - (2n/2) = - n

є вірним, то для непарних від’ємних двійкових чисел математична рівність

(-(2n-1)) / 2 = - ((2n-1)/2) = - n +1/2

не стверджується за рахунок втрати молодшого розряду при зсуві непарного числа вліво.

Наприклад, зсув вправо знакового двійкового числа 1.1010111 (-41 dec в додатковому коді) матиме результатом число 1.1101011 ( -21 dec в додатковому коді). Натомість, якщо спочатку зсунути вправо додатнє двійкове число 0.0101001 (41 dec), а в одержаному результаті змінити знак, то одержимо число 1.1101100 (-20 dec в додатковому коді).

Таким чином, зсув додатнього непарного числа вправо із подальшою зміною знаку результату призводить до формування додатньої похибки:

(-(2n-1)) / 2 = - n +1/2.

Зміна знаку додатнього діленого, яке потім зсувається вправо, формує від’ємну похибку:

(-(2n-1)) / 2 = - n - 1/2.