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.


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)

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

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


-2

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


Was würde es mit 16 multiplizieren - was braucht das OP wie?
Raphael

9
10x8x2x
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.