¡Foto!

¡Envia tu foto al Fotomaton!

Multiplicación: Algoritmo de Booth

19 comentarios · 13.024 lecturas · programacion

¡OJO! Si no eres informático o estudiante de ingenieria computacional, probablemente este artículo no te interese.

Hace unos días necesité implementar el algoritmo de Booth en C++ para una parte de una de las prácticas de la asignatura Teoría de autómatas y lenguajes formales y la verdad, aunque existe bastante información, eché en falta una explicación didáctica para comprender el procedimiento desde un punto de partida. Asi pues, en este artículo intentaré explicar el procedimiento del algoritmo lo mejor posible.

El algoritmo de Booth es un método rápido y sencillo para obtener el producto de dos números binarios con signo en notación complemento a dos.

Debemos saber que un número binario está formado por bits de ceros y unos, y que se puede traducir a decimal fácilmente de la siguiente forma:

binario bits

Sabiendo que la posición de cada bit es 2^n (elevado a n) y partimos de n=0 de derecha a izquierda, sólo queda realizar la suma total de multiplicar por dicho bit, en este caso:
(0·2^7+1·2^6+0·2^5+1·2^4+0·2^3+1·2^2+1·2^1+0·2^0 = 86).

También debemos saber que el complemento a uno de un número binario es cambiar sus ceros por unos, y sus unos por ceros (complementar): (010010 -> ca1: 101101) y que el complemento a dos de un número binario es el resultado de sumar 1 al complemento a uno de dicho número binario:

binario ca1 ca2 complemento

Realizar una suma con dos números binarios es tarea fácil, pero la multiplicación resulta algo más complicada. Con el algoritmo de Booth, resulta mucho más sencillo de implementar. Partimos del ejemplo de la multiplicación 6·2=12:

binario booth

Como se puede ver en la imagen superior, partiendo de los números binarios de la multiplicación 6·2 (multiplicando y multiplicador) creamos tres nuevos números binarios del doble de tamaño (16 en el ejemplo): A, S y P.

Partiendo del número P (producto) comenzamos a comparar los últimos 2 bits de la derecha, siguiendo los casos base del recuadro:

binario booth

Se realizará esta comparación 8 veces en este ejemplo (número de bits de los operandos) y al final de cada comparación, realizamos un desplazamiento de un bit hacia la derecha, manteniendo el último bit de la izquierda, y descartando el último bit del lado contrario. Si hacemos una traza paso a paso nos quedarían los siguientes resultados:

algoritmo binario booth

Finalmente obtenemos el número en binario resultante (12 en este ejemplo), descartando el bit extra que hemos añadido al principio del procedimiento y que se encuentra en el extremo a la derecha.

Espero que esto les sirva tanto como me sirvió a mi en su momento.


19 comentarios · Escrito el 27-Oct-2006 · Ver menciones
Recomendar por correo · Meneame · Añadir a del.icio.us

Conexión a internet más rápida y veloz.

19 Comentarios


#1 Publicado hace 2 años
BraZuky Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Y yo que a veces que considero geek......


Que equivocado estaba.........

#2 Publicado hace 2 años
Shadow Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Muy bien pero tarde, si lo hubiese tenido el domingo

#3 Publicado hace 2 años
Odnei Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Otro modo de hacer el complemento a 2, es leyendo de derecha a izquierda el número binario, a partir del primer 1 que nos encontremos (sin incluir al propio 1), complementar todos los bits. Ejemplo: 8 en decimal (8 bits) es 00001010, el -8 en C2 sería 11110110.

#4 Publicado hace 2 años
ZiRRuS Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Ufff, esto me hubiera venido bien en segundo de carrera en Sistemas Digitales. Pero hace ya unos años de eso ;)

Magnífica explicación

Nos vemos!

#5 Publicado hace 2 años
Merks Lector

Navegando con Internet Explorer
Bajo Windows XP

Oigan, esto está muy interesante, voy a aplicarlo... Saludos...

#6 Publicado hace 2 años
KL Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Pues me parece que yo tambien

#7 Publicado hace 2 años
Dite Lector

Navegando con Internet Explorer
Bajo Windows XP

Muy buena forma de explicar el algoritmo de booth, ojala mi profesor de Arquitectura de Computadoras hubiera hecho un copy paste de tu articulo jajajaj

#8 Publicado hace 2 años
Tania Lector

Navegando con Mozilla Firefox
Bajo Windows XP

UHY MUY BUERNA PAG, GRACIAS X EL TIP, ^^

#9 Publicado hace 1 año
Hoc Lector

Navegando con Mozilla Firefox
Bajo Linux

Vas a tener que explicarselo a Demetrio

#10 Publicado hace 1 año
Hoc Lector

Navegando con Mozilla Firefox
Bajo Linux

Mucho micro acólito suelto, si que hay si, el algoritmo de booth funciona mejor en Linux. Ese pingüino guaaaapo

#11 Publicado hace 1 año
jasmina lanzas Lector

Navegando con Internet Explorer
Bajo Windows XP

Por que no realizan un programa para calcular el complemento a dos en el lenguaje de c++

#12 Publicado hace 1 año
Alan Lector

Navegando con Internet Explorer
Bajo Windows XP

Estaria bien q se agregara el algoritmo correspondiente. pero ya se q pido mucho. De todas formas sta clara la idea, jejejeje.

#13 Publicado hace 1 año
monica Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Oye muchas gracias!!! me ha sido muy util!!

#14 Publicado hace 1 año
uno Lector

Navegando con Mozilla Firefox
Bajo Ubuntu Linux

¿para hacerlo en c no serviría con not(num)+1?

#15 Publicado hace 1 año
uno Lector

Navegando con Mozilla Firefox
Bajo Ubuntu Linux

¿para hacerlo en c no serviría con not(num)+1?

#16 Publicado hace 9 meses
walter Lector

Navegando con Internet Explorer
Bajo Windows XP

Muchas gracias

#17 Publicado hace 6 meses
tOBY Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Excelente explcacion, ayuda bastante sobretodo ahora que necesito realizar un circuito multiplicador de punto flotante.. Gracias

#18 Publicado hace 5 meses
claudio Lector

Navegando con Internet Explorer
Bajo Windows XP

Excelente explicación....tengo un examen, y no fui a clases, me cayo de perillas.!

#19 Publicado hace 2 meses
Manasa Lector

Navegando con Internet Explorer
Bajo Windows XP

Odni estas confundido, el 8 en binario es 1000, pero para representarlo en complemento a 2 es necesario tener en cuenta el bit de signo (=0 indica positivo, =1 indica negativo) entonces el numero 8 seria 01000, y su complemento a dos es decir el -8 seria: 11000

Deja tu comentario


en Internet.




Consejos


  • Los comentarios fuera del tema del artículo (OFF-TOPIC) serán eliminados.
  • Escribir completamente en MAYUSCULAS en Internet equivale a GRITAR y está mal visto.
  • No utilices lenguaje SMS, en Emezeta no te cobramos por letras escritas.
  • No hagas publicidad de tu página o dejes enlaces en el comentario para aumentar el PR o la popularidad en buscadores. En Emezeta se aplica el tag nofollow, que hace que Google ignore esos enlaces.
  • No insultes. Al escribir un comentario tus datos quedan almacenados y serás el único responsable de tus palabras. Se permite la libertad de expresión y de opinión, pero no los comentarios ofensivos.
  • Puedes insertar algunas etiquetas HTML en los comentarios: em, a href, b, i, em, code, acronym y strong.
  • Es posible añadir una foto junto a tus comentarios, para ello sólo tienes que personalizarla en Gravatar. [?]

Envía tu foto


Fotomatón Emezeta

Envia tu fotografía al fotomatón de Emezeta. Puedes enviar varias y saldrás en la portada de Emezeta.


Artículo de http://www.emezeta.com/

10 consultas efectuadas / Página generada en 0.072 segundos

Programado íntegramente por José Román (Manz) en XHTML y CSS estándar.

Sindicado bajo Feed RSS. Contenido bajo licencia Creative Commons

Estadísticas de visitas · Términos y condiciones · Contacto · Publicidad · Preguntas frecuentes (FAQ)