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.
arithmetic
binary
user76675
la source
la source
Réponses:
Je suppose que la tâche consiste à calculerm u l ( 10 , a ) = 10 a . Vous n'avez pas besoin de multiplier. Un seul additionneur binaire suffit car
la source
10
s'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.imul
instruction. ( godbolt.org/g/uSUSHu pour x86, ARM et la sortie du compilateur asm MIPS pour une*10
fonction triviale que vous pouvez probablement lire même si vous ne connaissez pas asm). En fait pour x86, les compilateurs utilisent généralementa = a + a*4;
a+=a;
parce que c'est plus efficace: stackoverflow.com/questions/6120207/imul-or-shift-instruction .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
la source
Sûr. Vous calculez juste1010b×110b en 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.
et notez que11100b=60d , comme prévu.
la source
Multipliez par 8 (décalage gauche 3) puis ajoutez-y une multiplication par deux (décalage gauche 1).
la source