¿Cómo puedo multiplicar una representación binaria por diez usando puertas lógicas?

8

Así que actualmente estoy trabajando en algo y he convertido todos los dígitos decimales 0-9 en binario. Pero ahora quiero tomar digamos 6 en binario y aumentar su orden de magnitud en base 10 (convirtiendo 6 en 60) sin convertir de nuevo a base 10. ¿Es esto posible? Si es así, ¿hay alguna manera de hacerlo con cualquier número? X -> X0?

EDITAR 1: lo siento, la primera parte de la pregunta fue muy vaga y olvidé mencionar que estoy tratando de hacer esto con puertas lógicas.

usuario76675
fuente
¿Sabes cómo funcionan los circuitos de multiplicación?
rus9384
2
Por supuesto que es posible: las CPU pueden hacer todo tipo de aritmética, entonces, ¿por qué no esto? No será tan fácil como agregar un 0 al final; eso se llama un desplazamiento a la izquierda en la jerga de la CPU, que en binario se multiplica claramente con (potencias de) dos.
Raphael
No, no lo explico
usuario76675
77
Sería extraño que la mayoría de nosotros tuviéramos el número de dedos que era la única base (?) En la que había un algoritmo de multiplicación. (¿O sería una ventaja evolutiva increíble?)
PJTraill
1
@ rus9384: Lo siento, mi comentario estaba destinado a insinuar irónicamente lo que declaras explícitamente.
PJTraill

Respuestas:

48

Supongo que la tarea es calcular . No necesitas hacer multiplicación. Un solo sumador binario es suficiente ya que lo que significa que agrega una vez desplazado a la izquierda a 3 veces desplazado a la izquierda . Para la multiplicación general , consulte este artículo .mul(10,a)=10a

10a=23a+2a
aamul(x,y)
fade2black
fuente
10
+1 para reconocer que 10es una constante, por lo que no necesitamos el multiplicador de propósito general. También ayuda que haya usado palabras que son fáciles de traducir en puertas lógicas, ya que el OP mencionó que ese era su objetivo final.
Cort Ammon
66
Dato curioso: en el ensamblaje x86, usted (o un compilador inteligente) puede usar este truco multiplicado por 10 con una latencia (ligeramente) menor que una imulinstrucción. ( godbolt.org/g/uSUSHu para x86, ARM y salida del compilador asm MIPS para una *10función trivial que probablemente pueda leer incluso si no conoce asm). En realidad, para x86, los compiladores suelen usarlo a = a + a*4; a+=a;porque es más eficiente: stackoverflow.com/questions/6120207/imul-or-shift-instruction .
Peter Cordes
11

Multiplicar por 10 es lo mismo que multiplicar por . Para multiplicar un número binario por 10, solo tenemos que sumar y . Por ejemplo, se implementa por La entrada es , y la salida es .(1010)2xx0x0006×10=60

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

Por supuesto. Simplemente calcula utilizando la versión binaria de la multiplicación larga (o algún otro algoritmo). Lo bueno de la multiplicación larga en binario es que nunca tienes que cargar nada, excepto cuando estás sumando cosas al final.1010b×110b

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

y tenga en cuenta que , como se esperaba.11100b=60d

David Richerby
fuente
-2

Multiplique por 8 (desplazamiento a la izquierda 3) y luego agregue una multiplicación por dos (desplazamiento a la izquierda 1).

Reed Shilts
fuente
¿Cuál lo multiplicaría por 16, que es lo que necesita el OP y cómo?
Raphael
99
@Raphael Creo que has entendido mal: esta respuesta sugiere calcular al calcular y y sumarlos . Entonces, es solo un engaño de la respuesta aceptada. Reed, solo agrega nuevas respuestas si dicen algo que aún no se ha dicho. 10x8x2x
David Richerby