algoritmo di moltiplicazione booth

3

È l'algoritmo di cabina per la moltiplicazione solo per moltiplicare 2 numeri negativi (-3 * -4) o un numero positivo e uno negativo %codice% ? Ogni volta che moltiplico 2 numeri positivi usando l'algoritmo della cabina ottengo un risultato sbagliato.

esempio: 5 * 4

A = 101 000 0 (-3 * 4)

S = 011 000 0 // binary of 5 is 101

P = 000 100 0 // 2's complement of 5 is 011

x = 3

y = 3

m = 5

-m = complemento a 2 di m

r = 4

  1. Dopo il passaggio a destra di P di 1 bit 0 000 100

  2. Dopo il passaggio a destra di P di 1 bit 0 000 010

  3. P + S = 011 001 0

    Dopo il passaggio a destra di 1 bit 0 011 001

  4. Eliminazione di LSB 001100

    Ma questo risulta essere il binario di 12. Dovrebbe essere stato 20 (010100)

posta grassPro 19.11.2011 - 04:46
fonte

1 risposta

4

Il problema è che stai usando 3 bit per me r, e devono essere rappresentati usando 4 bit per ottenere valori senza segno. (Usando solo 3 bit, 101 = -3 e 100 = -4, e il risultato fa = 12).

Quindi rifacendo questo con 4 bit, si ottiene:

example : 5 * 4

A = 0101 0000 0 // binary of 5 is 0101

S = 1011 0000 0 // 2's complement of 5 is 1011

P = 0000 0100 0 // binary of 4 is 0100

x = 4

y = 4

m = 5

-m = 2's complement of m

r = 4

1.    After right shift of P by 1 bit 0000 0010 0

2.    After right shift of P by 1 bit 0000 0001 0

3.    P+S = 1011 0001 0

      After right shift by 1 bit 0101 1000 1

4.    P+A = 0010 1001 0     (not 1010 1001 0, since overflow in MSB is ignored)

      After right shift by 1 bit 0001 0100 1

Discarding the LSB gives 00010100   which is 20

che fornisce la risposta corretta.

    
risposta data 19.11.2011 - 07:22
fonte

Leggi altre domande sui tag