Come posso moltiplicare una rappresentazione binaria per dieci usando le porte logiche?


8

Quindi attualmente sto lavorando a qualcosa e ho convertito tutte le cifre decimali 0-9 in binario. Ma ora voglio dire 6 in binario e aumentare il suo ordine di grandezza di base 10 (trasformando 6 in 60) senza riconvertire in base 10. È possibile e se sì c'è un modo per farlo con qualsiasi numero, X -> X0?

EDIT 1: mi dispiace che la prima parte della domanda sia stata super vaga e ho dimenticato di menzionare che sto cercando di farlo con le porte logiche.


Sai come funzionano i circuiti di moltiplicazione?
rus9384,

2
Ovviamente è possibile: le CPU possono fare tutti i tipi di aritmetica, quindi perché non questo? Non sarà facile come aggiungere uno 0 finale; questo è chiamato spostamento a sinistra nel gergo della CPU, che in binario si moltiplica chiaramente con (potenze di) due.
Raffaello

No, per favore, non spiegarlo
user76675

7
Sarebbe strano se la maggior parte di noi avesse il numero di dita che era l'unica (?) Base in cui esisteva un algoritmo di moltiplicazione. (O sarebbe un incredibile vantaggio evolutivo?)
PJTraill

1
@ rus9384: Mi dispiace, il mio commento ha lo scopo di insinuare ironicamente ciò che affermi esplicitamente.
PJTraill,

Risposte:


48

Presumo che il compito sia calcolare mul(10,un')=10un'. Non è necessario eseguire la moltiplicazione. Da allora è sufficiente un singolo sommatore binario

10un'=23un'+2un'
nel senso che aggiungi una volta spostato a sinistra un' a 3 volte spostato a sinistra un'. Per moltiplicazione generalemul(X,y)consultare questo articolo .

10
+1 per riconoscere che 10è una costante, quindi non abbiamo bisogno del moltiplicatore per scopi generali. Aiuta anche a usare parole che sono facili da tradurre in porte logiche, poiché l'OP ha menzionato che era il loro obiettivo finale.
Cort Ammon,

6
Curiosità: nell'assemblaggio x86, tu (o un compilatore intelligente) puoi usare questo trucco moltiplicando per 10 con una latenza (leggermente) inferiore rispetto a imulun'istruzione. ( godbolt.org/g/uSUSHu per l'output del compilatore asm x86, ARM e MIPS per una *10funzione banale che probabilmente si può leggere anche se non si conosce asm). In realtà per x86, i compilatori usano in genere a = a + a*4; a+=a;perché è più efficiente: stackoverflow.com/questions/6120207/imul-or-shift-instruction .
Peter Cordes,

11

Moltiplicare per 10 equivale a moltiplicare per (1010)2. Per moltiplicare un numero binarioX per 10, non ci resta che aggiungere X0 e X000. Per esempio,6×10=60 è implementato da

001100+110000111100
L'input è (6)10=(110)2e l'output è (111100)2=(60)10.

6

Sicuro. Devi solo calcolare1010B×110Busando la versione binaria della lunga moltiplicazione (o qualche altro algoritmo). La cosa bella della lunga moltiplicazione in binario è che non devi mai portare nulla, tranne quando stai sommando le cose alla fine.

   1010
    110 x
  ------
    000
   110
  000
 110
--------
 111100
--------

e nota che 11100B=60d, come previsto.


-2

Moltiplicare per 8 (spostamento a sinistra 3) quindi aggiungere ad esso un moltiplicare per due (spostamento a sinistra 1).


Quale sarebbe moltiplicarlo per 16 - qual è ciò di cui l'OP ha bisogno?
Raffaello

9
@Raphael Penso che tu abbia frainteso: questa risposta suggerisce l'informatica 10X mediante elaborazione 8X e 2Xe sommandoli insieme. Quindi è solo un inganno della risposta accettata. Reed, per favore aggiungi nuove risposte solo se dicono qualcosa che non è già stato detto.
David Richerby,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.