Является ли алгоритм умножения будкой для умножения 2 положительных чисел?

Является ли алгоритм будки для умножения только для умножения 2 отрицательных чисел (- 3 * -4) или одного положительного и одного отрицательное число (- 3 * 4) ? Всякий раз, когда я умножаю 2 положительных числа с использованием алгоритма будки, я получаю неверный результат.

пример: 5 * 4

A = 101 000 0 // двоичное число 5 равно 101

S = 011 000 0 // двойное дополнение 5 равно 011

P = 000 100 0 // двоичное число 4 равно 100

x = 3 количество бит в m

y = 3 количество бит в r

m = 5

-m = 2-е дополнение к m

r = 4

  1. После сдвига вправо P на 1 бит 0 000 100

  2. После сдвига вправо P на 1 бит 0 000 010

  3. P + S = 011 001 0

    После сдвига вправо на 1 бит 0 011 001

  4. Отбрасывание LSB 001100

    Но оказывается, что это двоичное число 12. Это должно было быть 20 (010100)

UPDATE после ответа @ ruakh

5 * 4 = 20

m = 0101 is 5

r = 0100 is 4

A = 0101 0000 0

S = 1010 0000 0

P = 0000 0100 0

  1. сдвинуть P вправо на 1 бит: 0 0000 0100

  2. сдвинуть P вправо на 1 бит: 0 0000 0010

  3. P + S = 10100010 Сдвиг вправо на 1 бит: 1101 0001

  4. P + A = 1 0010 0001 здесь 1 - сгенерированный перенос сдвиг вправо на 1 бит: 110010000

Оставьте младший бит: 11001000 (не равно 20)

8
задан saplingPro 19 November 2011 в 04:47
поделиться