Facebook Badge

Wednesday, August 25, 2010

Java Program for implementation of Booth's Algorithm

/**

* @(#)Booth.java

*

*

* @author Rohit.E.Iyer

* @version 1.00 2010/8/22

*/



/* Java Program For Implementation Of Signed Multiplication

OR

Java Program for the Implementation Of Booth's Algorithm */



import java.util.*;



class Booth

{

public static int get(int a)

{

Scanner src=new Scanner(System.in);

char ch='B';

int flag=0;

if(a==1)

ch='A';

do

{

System.out.print("¦ ENTER VALUE OF "+ch+" : ");

a=src.nextInt();;

if(a< 0)

{

a = a * -1;

flag = 1;

}

if(127<a)

System.out.print("¦\n!INVALID NUMBER.ENTER VALUE (-127 < A < 128)!");

}while(127< a);

if(flag==1)

a = a *-1;

return(a);

}



public static void add(int a[],int b[])

{

int x,i,c=0;

for(i=7;i>=0;i--)

{

x=a[i];

a[i]=c^x^b[i];

if(((c==1)&&(x==1))||((x==1)&&(b[i]==1))||((b[i]==1)&&(c==1)))

c = 1;

else

c = 0;

}

}



public static void binary(int x,int arr[])

{

int i,p=x;

int[]c={0,0,0,0,0,0,0,1};

for(i=0;i< 8;i++)

arr[i] = 0;

if(x < 0)

x = x *-1;

i = 7;

do

{

arr[i]=x%2;

x = x/2;

i--;

}while(x!=0);

if(p< 0)

{

for(i=0;i< 8;i++)

arr[i]=1-arr[i];

add(arr,c);

}

System.out.print("\n\nTHE BINARY EQUIVALENT OF "+p+" IS : ");

for(i=0;i< 8;i++)

System.out.print(arr[i]);

}



public static void rshift(int x,int y[])

{

int i;

for(i=7;i>0;i--)

y[i] = y[i-1];

y[0] = x;

}



public static void main(String args[])

{

int q=0,i,j,a,b,temp;

int[] A={0,0,0,0,0,0,0,0},C={0,0,0,0,0,0,0,1},C1={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};

int s=0,z=0;

int[] Q=new int[8];

int[] M=new int[8];

int[] temp1=new int [8];

int[] ans=new int[16];

int y,x=0,c=0;



System.out.print("\n¦----------------------------------------------------\n");

a = get(1);

b=get(0);

System.out.println("\n¦---------------------------------------------------\n");

binary(a,M);

binary(b,Q);

System.out.print("\n\n---------------------------------------------------\n");

System.out.print(" OPERATION\t\t A\t\t Q\t\t Q'\t M");

System.out.print("\n\n INITIAL\t\t");

for(i=0;i< 8;i++)

System.out.print(A[i]);

System.out.print("\t");

for(i=0;i< 8;i++)

System.out.print(Q[i]);

System.out.print("\t");

System.out.print(q+"\t");

for(i=0;i< 8;i++)

System.out.print(M[i]);

for(j=0;j< 8;j++)

{

if((Q[7]==0)&&(q==1))

{

System.out.print("\n A=A+M \t\t\t");

add(A,M);

for(i=0;i< 8;i++)

System.out.print(A[i]);

System.out.print("\t");

for(i=0;i< 8;i++)

System.out.print(Q[i]);

System.out.print("\t"+q+"\t");

for(i=0;i< 8;i++)

System.out.print(M[i]);

}

if((Q[7]==1)&&(q==0))

{

System.out.print("\n A=A-M \t\t\t");

for(i=0;i< 8;i++)

temp1[i] = 1-M[i];

add(temp1,C);

add(A,temp1);

for(i=0;i< 8;i++)

System.out.print(A[i]);

System.out.print("\t");

for(i=0;i< 8;i++)

System.out.print(Q[i]);

System.out.print("\t"+q+"\t");

for(i=0;i< 8;i++)

System.out.print(M[i]);

}

System.out.print("\n Shift \t\t\t");

y = A[7];

q = Q[7];

rshift(A[0],A);

rshift(y,Q);

for(i=0;i< 8;i++)

System.out.print(A[i]);

System.out.print("\t");

for(i=0;i< 8;i++)

System.out.print(Q[i]);

System.out.print("\t");

System.out.print(q+"\t");

for(i=0;i< 8;i++)

System.out.print(M[i]);

}

System.out.print("\n\n---------------------------------------------------\n");

System.out.print("\nTHE ANSWER IN BINARY IS : ");

for(i=0;i< 8;i++)

ans[i]=A[i];

for(i=0;i< 8;i++)

ans[i+8]=Q[i];

if(((a< 0)&&(b>0))

((a>0)&&(b< 0)))

{

for(i=0;i< 16;i++)

ans[i]=1-ans[i];

for(i=15;i>=0;i--)

{

x = ans[i];

ans[i]=c^x^C1[i];

if(((c==1)&&(x==1))||((x==1)&&(C1[i]==1))||((C1[i]==1)&&(c==1)))

c=1;

else

c=0;

}

}

for(i=0;i< 16;i++)

System.out.print(ans[i]);

for(i=15;i>=0;i--)

{

s = s + ((int)Math.pow(2,z) * ans[i]);

z = z+1;

}

if(((a< 0)&&(b>0))||((a>0)&&(b< 0)))

System.out.print("\nTHE ANSWER IN DECIMAL IS :- "+s+"\n");

else

System.out.print("\nTHE ANSWER IN DECIMAL IS : "+s+"\n");



}

}

No comments:

Post a Comment