Wie kann ich eine Binärdarstellung mit Logikgattern mit zehn multiplizieren?

8

Ich arbeite gerade an etwas und habe alle Dezimalstellen 0-9 in Binärzahlen konvertiert. Aber jetzt möchte ich sagen 6 in binär nehmen und seine Größenordnung um Basis 10 erhöhen (6 in 60 verwandeln), ohne zurück zu Basis 10 zu konvertieren. Ist dies möglich und wenn ja, gibt es eine Möglichkeit, dies mit einer beliebigen Zahl zu tun, X. -> X0?

EDIT 1: Entschuldigung, der erste Teil der Frage war sehr vage und ich habe vergessen zu erwähnen, dass ich versuche, dies mit Logikgattern zu tun.

user76675
quelle
Wissen Sie, wie Multiplikationsschaltungen funktionieren?
Rus9384
2
Natürlich ist es möglich - CPUs können alle Arten von Arithmetik ausführen. Warum also nicht? Es ist nicht so einfach wie das Hinzufügen einer nachgestellten 0; Dies wird als Linksverschiebung im CPU-Jargon bezeichnet, die sich im Binärmodus eindeutig mit (Potenzen von) zwei multipliziert.
Raphael
Nein, ich erkläre es bitte nicht
user76675
7
Es wäre seltsam, wenn die meisten von uns zufällig die Anzahl der Finger hätten, die die einzige (?) Basis waren, auf der es einen Multiplikationsalgorithmus gab. (Oder wäre dies ein erstaunlicher evolutionärer Vorteil?)
PJTraill
1
@ rus9384: Entschuldigung, mein Kommentar sollte ironisch andeuten, was Sie ausdrücklich sagen.
PJTraill

Antworten:

48

Ich gehe davon aus, dass die Aufgabe darin besteht, zu berechnen . Sie müssen keine Multiplikation durchführen. Ein einzelner Binäraddierer genügt da dh Sie einmalige hinzuzufügen links verschoben bis 3-Mal nach links verschoben . Eine allgemeine Multiplikationsmul Sie in diesem Artikel .10 a = 2 3 a + 2 a a a m u l ( x , y )mul(10,a)=10a

10a=23a+2a
aamul(x,y)
fade2black
quelle
10
+1, um zu erkennen, dass dies 10eine Konstante ist, daher benötigen wir keinen Mehrzweckmultiplikator. Es hilft auch, dass Sie Formulierungen verwendet haben, die sich leicht in Logikgatter übersetzen lassen, da das OP erwähnt hat, dass dies ihr Endziel war.
Cort Ammon
6
Unterhaltsame Tatsache: In der x86-Assembly können Sie (oder ein intelligenter Compiler) diesen Trick mit 10 multiplizieren, wobei die Latenz (geringfügig) geringer ist als bei einer imulAnweisung. ( godbolt.org/g/uSUSHu für x86-, ARM- und MIPS-Asm-Compiler-Ausgabe für eine triviale *10Funktion, die Sie wahrscheinlich lesen können, auch wenn Sie asm nicht kennen). Tatsächlich verwenden Compiler für x86 normalerweise, a = a + a*4; a+=a;weil dies effizienter ist: stackoverflow.com/questions/6120207/imul-or-shift-instruction .
Peter Cordes
11

Das Multiplizieren mit 10 entspricht dem Multiplizieren mit . Um eine Binärzahl mit 10 zu multiplizieren , müssen wir also nur und . Zum Beispiel wird implementiert durch Die Eingabe ist und die Ausgabe ist . × x 0 × 000 6 × 10 = 60(1010)2xx0x0006×10=60 (6)10=(110)2(111100)2=(60)10

001100+110000111100
(6)10=(110)2(111100)2=(60)10
Yuval Filmus
quelle
6

Sicher. Sie berechnen einfach mit der binären Version der langen Multiplikation (oder einem anderen Algorithmus). Das Schöne an der langen Multiplikation in Binärform ist, dass Sie nie etwas tragen müssen, außer wenn Sie die Dinge am Ende addieren.1010b×110b

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

und beachten Sie, dass wie erwartet.11100b=60d

David Richerby
quelle
-2

Mit 8 multiplizieren (Linksverschiebung 3) und dann mit 2 multiplizieren (Linksverschiebung 1).

Reed Shilts
quelle
Was würde es mit 16 multiplizieren - was braucht das OP wie?
Raphael
9
10x8x2x