Vous êtes sur la page 1sur 3

Algoritmo de Booth

Hace unos das necesit implementar el algoritmo de Booth en C++ para una parte de una de las prcticas de la asignatura Teora de autmatas y lenguajes formales y la verdad, aunque existe bastante informacin, ech en falta una explicacin didctica para comprender el procedimiento desde un punto de partida. Asi pues, en este artculo intentar explicar el procedimiento del algoritmo lo mejor posible. El algoritmo de Booth es un mtodo rpido y sencillo para obtener el producto de dos nmeros binarios con signo en notacin complemento a dos. Debemos saber que un nmero binario est formado por bits de ceros y unos, y que se puede traducir a decimal fcilmente de la siguiente forma:

Sabiendo que la posicin de cada bit es 2^n (elevado a n) y partimos de n=0 de derecha a izquierda, slo queda realizar la suma total de multiplicar por dicho bit, en este caso, lo que muestro a continuacin: 027+126+025+124+023+122+121+020 = 86. Tambin debemos saber que el complemento a uno de un nmero binario es cambiar sus ceros por unos, y sus unos por ceros (complementar): (010010 -> ca1: 101101) y que el complemento a dos de un nmero binario es el resultado de sumar 1 al complemento a uno de dicho nmero binario (NOTA: En el Ca1 slo se complementa si el nmero es negativo):

Realizar una suma con dos nmeros binarios es tarea fcil, pero la multiplicacin resulta algo ms complicada. Con el algoritmo de Booth, resulta mucho ms sencillo de implementar. Partimos del ejemplo de la multiplicacin 62=12:

Como se puede ver en la imagen superior, partiendo de los nmeros binarios de la multiplicacin 62 (multiplicando y multiplicador) creamos tres nuevos nmeros binarios del doble de tamao (16 en el ejemplo): A, S y P. Partiendo del nmero P (producto) comenzamos a comparar los ltimos 2 bits de la derecha, siguiendo los casos base del recuadro:

Se realizar esta comparacin 8 veces en este ejemplo (nmero de bits de los operandos) y al final de cada comparacin, 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 quedaran los siguientes resultados:

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