Comment puis-je multiplier une représentation binaire par dix en utilisant des portes logiques?

8

Je travaille donc actuellement sur quelque chose et j'ai converti tous les chiffres décimaux 0-9 en binaire. Mais maintenant, je veux prendre disons 6 en binaire et augmenter son ordre de grandeur de base 10 (en transformant 6 en 60) sans reconvertir en base 10. Est-ce possible et si oui, y a-t-il un moyen de le faire avec n'importe quel nombre, X -> X0?

EDIT 1: désolé, la première partie de la question était super vague et j'ai oublié de mentionner que j'essaie de le faire avec des portes logiques.

user76675
la source
Savez-vous comment fonctionnent les circuits de multiplication?
rus9384
2
Bien sûr, c'est possible - les processeurs peuvent faire toutes sortes d'arithmétiques, alors pourquoi pas cela? Ce ne sera pas aussi simple que d'ajouter un 0 à la fin; cela s'appelle un décalage à gauche dans le jargon du processeur, qui en binaire se multiplie clairement avec (pouvoirs de) deux.
Raphael
Non je ne vous explique pas
user76675
7
Ce serait bizarre si la plupart d'entre nous avaient le nombre de doigts qui était la seule (?) Base dans laquelle il y avait un algorithme de multiplication. (Ou serait-ce un avantage évolutif incroyable?)
PJTraill
1
@ rus9384: Désolé, mon commentaire était destiné à insinuer ironiquement ce que vous déclarez explicitement.
PJTraill

Réponses:

48

Je suppose que la tâche consiste à calculer mul(10,a)=10a. Vous n'avez pas besoin de multiplier. Un seul additionneur binaire suffit car

10a=23a+2a
ce qui signifie que vous ajoutez une fois décalé vers la gauche a à 3 fois décalé à gauche a. Pour une multiplication généralemul(x,y)veuillez consulter cet article .
fade2black
la source
10
+1 pour reconnaître qu'il 10s'agit d'une constante, nous n'avons donc pas besoin du multiplicateur à usage général. Il est également utile que vous utilisiez des formulations faciles à traduire en portes logiques, car le PO a mentionné que c'était leur objectif final.
Cort Ammon
6
Fait amusant: dans un assemblage x86, vous (ou un compilateur intelligent) pouvez utiliser cette astuce multipliée par 10 avec une latence (légèrement) inférieure à une imulinstruction. ( godbolt.org/g/uSUSHu pour x86, ARM et la sortie du compilateur asm MIPS pour une *10fonction triviale que vous pouvez probablement lire même si vous ne connaissez pas asm). En fait pour x86, les compilateurs utilisent généralement a = a + a*4; a+=a;parce que c'est plus efficace: stackoverflow.com/questions/6120207/imul-or-shift-instruction .
Peter Cordes
11

La multiplication par 10 équivaut à la multiplication par (1010)2. Pour multiplier un nombre binairex par 10, il suffit donc d'ajouter x0 et x000. Par exemple,6×10=60 est mis en œuvre par

001100+110000111100
L'entrée est (6)10=(110)2et la sortie est (111100)2=(60)10.
Yuval Filmus
la source
6

Sûr. Vous calculez juste1010b×110ben utilisant la version binaire de la multiplication longue (ou un autre algorithme). La bonne chose à propos de la multiplication longue en binaire est que vous n'avez jamais rien à transporter, sauf lorsque vous ajoutez des choses à la fin.

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

et notez que 11100b=60d, comme prévu.

David Richerby
la source
-2

Multipliez par 8 (décalage gauche 3) puis ajoutez-y une multiplication par deux (décalage gauche 1).

Shilts Reed
la source
Lequel serait multiplié par 16 - quel est le besoin du PO comment?
Raphael
9
@Raphael Je pense que vous avez mal compris: cette réponse suggère l'informatique 10x en calculant 8x et 2xet en les ajoutant ensemble. Ce n'est donc qu'une dupe de la réponse acceptée. Reed, veuillez n'ajouter de nouvelles réponses que si elles disent quelque chose qui n'a pas déjà été dit.
David Richerby