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.
arithmetic
binary
user76675
quelle
quelle
Antworten:
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
quelle
10
eine 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.imul
Anweisung. ( godbolt.org/g/uSUSHu für x86-, ARM- und MIPS-Asm-Compiler-Ausgabe für eine triviale*10
Funktion, 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 .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)2 x x0 x000 6×10=60 (6)10=(110)2(111100)2=(60)10
quelle
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
und beachten Sie, dass wie erwartet.11100b=60d
quelle
Mit 8 multiplizieren (Linksverschiebung 3) und dann mit 2 multiplizieren (Linksverschiebung 1).
quelle