/**
* @(#)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