Está en la página 1de 10

Algoritmo de Booth. El algoritmo de Booth permite multiplicar nmeros con signo, representados en complemento a 2.

El algoritmo bsico considera en cada paso dos bits del multiplicador. Segn el bit en curso y el anterior se elige la operacin a realizar: Bit en curso 1 1 0 0 Bit de la derecha 0 1 1 0 Operacin resta ninguna suma ninguna Comentario Principio de una cadena de unos. Mitad de una cadena de unos. Final de una cadena de unos. Mitad de una cadena de ceros.

La operacin de resta se realiza sumando a la mitad izquierda del registro producto (R1) el complemento a dos del multiplicando. La operacin de suma se realiza sumando a la mitad izquierda del registro producto (R1) el multiplicando. Tras cada operacin se desplaza el registro producto un bit a la derecha, conservando el signo (desplazamiento aritmtico). (Villar & Morgado Estevez, 2005, pg. 39)

Pgina 1 de 10

CODIGO FUENTE.
package arreglobinario; import javax.swing.JOptionPane; public class Metodos {

final static int tamIndice = 12; static int[] aBinario(int num){ //Mtodo para la conversin a numero int numA = num; binario// int[] arrBinario= new int[tamIndice]; int indice = tamIndice-1; boolean negativo= false; if (num<0){ num = num * -1; negativo = true; } while(num >0 && indice >= 0){ arrBinario[indice] = num%2; num = num /2; indice --; } if(num > 0 ){ JOptionPane.showMessageDialog(null,"Da otro numero, "+ numA + " tiene mas de 12 bits"); System.exit(0); } while (indice > 0){ arrBinario[indice] = 0; indice --; } if (negativo) arrBinario = complemento_2(arrBinario); return arrBinario; static String numBinario(int[] arrB){ String num=""; for(int i = arrB.length -1; i>= 0; i--){ num = arrB[i] + num; } return num; }

Pgina 2 de 10

static double aDecimal(int[] arrB){ //Mtodo para convertir numero double num=0; binario a decimal// int indice = 0; for(int i = arrB.length -1; i>= 0; i--){ if (i==0 ) num = num -( Math.pow(2, indice)*arrB[i]); else num = num +( Math.pow(2, indice)*arrB[i]); indice ++;

} return num;

static int[] negativo(int[] numero){ //Mtodo para numero negativo// for(int i = numero.length -1; i>=0; i--){ if (numero[i] == 1) numero[i] = 0; else numero[i] = 1; } return numero;

static int[] funAND(int[] a, int[] b){ //Mtodo utilizado para la int[] resultado = new int[a.length]; function AND// for(int i = a.length if (a[i] == 1 && resultado[i] else resultado[i] } return resultado; } -1; i>=0; i--){ b[i]==1) = 1; = 0;

static int[] funOR(int[] a, int[] b){ //Mtodo utilizado para la int[] resultado = new int[a.length]; function OR// for(int i = a.length if (a[i] == 0 && resultado[i] else resultado[i] } return resultado; -1; i>=0; i--){ b[i]==0) = 0; = 1;

Pgina 3 de 10

} static int[] complemento_2(int[] a){ int[] resultado = new int[a.length]; boolean primerUno= false; for(int i = a.length-1; i>=0; i--){ if(primerUno){ if( a[i]==1) resultado[i]=0; else resultado[i]=1; }else{ if(a[i]==1) primerUno = true; resultado[i]= a[i]; } } return resultado; } static int[] funSuma(int[] a, int[] b){ //Mtodo utilizado para la int[] resultado = new int[a.length]; function Suma// int complemento=0; for(int i = a.length-1; i>= 0; i--){ int n1 = a[i]; int n2 = b[i]; if ((n1 == 0 ) && (n2==0)){ if(complemento == 1) resultado[i]= 1; else resultado[i]= 0; complemento =0; }else{ if ((n1==1) && (n2==1)){ if(complemento==1) resultado[i]=1; else resultado[i]=0; complemento=1; }else{ if(complemento==1){ resultado[i]=0; complemento=1; }else{ resultado[i]=1; complemento=0; } }

Pgina 4 de 10

} } return resultado; } static int[] funResta(int[] a, int[] b){ return funSuma(a,complemento_2(b)); } static int multipSucesiva(int a, int b){ int resultado=0; if ( b>0) { System.out.println("b debe ser mayor a cero");} else System.out.println("a debe ser mayor a cero");

for( int i =0; i<b; i++) { resultado = } return resultado; } //Mtodo para multiplicacin sucesiva, pero no fue posible correr est mtodo, ya que no me permite agregar las entradas a y b// resultado +a;

Pgina 5 de 10

public static void main(String[] args) { //Implementacin del men para la corrida del programa// // TODO code application logic here int[] res; int[] res3; int [] res4; int [] res1; int op=0; int [] res2; int n1,n2,n3,n4,n5,n6, n7, n8, n9;

do{ Binaria"+

op=Integer.parseInt(JOptionPane.showInputDialog("Calculadora "[Ingresa una opcion]\n "+ "[1]-SUMAR\n "+ "[2]-RESTAR\n "+ "[3]-FUNCION AND\n "+ "[4]-FUNCION OR\n "+ "[5]-NUMERO DECIMAL A BINARIO\n"+ "[6]-SALIR\n "+ "")); switch(op) { case 1:

"));

n1=Integer.parseInt(JOptionPane.showInputDialog("Ingrese primer numero

n2=Integer.parseInt(JOptionPane.showInputDialog("Ingrese segundo numero ")); res =funSuma(aBinario(n1),aBinario(n2)); JOptionPane.showMessageDialog(null,"La suma en binario es:"+(numBinario(res))); JOptionPane.showMessageDialog(null, "La suma en decimal es:"+(aDecimal(res))); break; case 2: ")); n3=Integer.parseInt(JOptionPane.showInputDialog("Ingrese primer numero

n4=Integer.parseInt(JOptionPane.showInputDialog("Ingrese segundo numero ")); res1 =funResta(aBinario(n3),aBinario(n4)); JOptionPane.showMessageDialog(null,"La resta en binario es:"+(numBinario(res1))); JOptionPane.showMessageDialog(null, "La resta en decimal es:"+(aDecimal(res1))); break; case 3: n5=Integer.parseInt(JOptionPane.showInputDialog("Ingrese primer numero "));

Pgina 6 de 10

n6=Integer.parseInt(JOptionPane.showInputDialog("Ingrese segundo numero ")); res2 =funAND(aBinario(n5),aBinario(n6)); JOptionPane.showMessageDialog(null,"La funcion AND en binario es:"+(numBinario(res2))); JOptionPane.showMessageDialog(null, "La funcion AND en decimal es:"+(aDecimal(res2))); break; case 4: n7=Integer.parseInt(JOptionPane.showInputDialog("Ingrese primer numero ")); n8=Integer.parseInt(JOptionPane.showInputDialog("Ingrese segundo numero ")); res3 =funOR(aBinario(n7),aBinario(n8)); JOptionPane.showMessageDialog(null,"La funcion OR en binario es:"+(numBinario(res3))); JOptionPane.showMessageDialog(null, "La funcion OR en decimal es:"+(aDecimal(res3))); break; case 5: n9=Integer.parseInt(JOptionPane.showInputDialog("Ingrese numero en decimal ")); res4 =aBinario((n9)); JOptionPane.showMessageDialog(null,"El numero binario es:"+(numBinario(res4))); break; } }while(op!=6); }}

PROCEDIMIENTO DE PROGRAMA. Se realiza la corrida de la calculadora binaria, presionando el botn de corrida de programa (Run mtodos), acto seguido aparecer un panel, que desplegara las opciones que se tiene en el programa los cuales son: Pgina 7 de 10

Para continuar con el programa es necesario elegir una de las opciones, ejemplo de la opcin suma, ver parte inferior.

La opcin nmero 1: Sumar, es necesario agregar dos nmeros, los cuales el programa te los pedir de la siguiente forma: Paso 1, ingresar el primer nmero y presionar ok. nmero y presionar ok. Paso 2, ingresar el siguiente

Pgina 8 de 10

Al finalizar el paso 1 y 2, el programa te dar el resultado en binario y decimal, de la siguiente forma:

Para las siguientes operaciones, los pasos son similares, el programa te pedir los nmeros requeridos, uno a uno, solo en la conversin de binario a decimal, el programa te pedir un solo nmero en binario, para darte el resultado en decimal. Siempre se tiene Pgina 9 de 10

que presionar ok o enter para continuar en el programa. Para salir del programa se selecciona la opcin 6 y se presiona ok o enter.

Pgina 10 de 10