Implementation of Binary Division algorithm in C++:
Source code:
#include<iostream.h>
#include<conio.h>
void add(int &e,int
a[],int x[],int n)
{
int i;
for(i=0;i<n;i++)
{ a[i]=a[i]+x[i]+e;
if(a[i]>1)
{ a[i]=a[i]%2;
e=1;
}
else
e=0;
}
}
void complement(int
a[],int n)
{ int i,c=0;
int x[5]={NULL};
x[0]=1;
for(i=0;i<n;i++)
a[i]=(a[i]+1)%2;
add(c,a,x,n);
cout<<"complement=";
for(i=n-1;i>=0;i--)
cout<<a[i];
}
void shl(int &e,int
da[],int dq[],int bn)
{ int temp,i;
temp=dq[bn-1];
e=da[bn-1];
for(i=bn-1;i>=0;i--)
{ da[i]=da[i-1];
dq[i]=dq[i-1];
}
dq[0]=0;
da[0]=temp;
}
void display(int
da[],int dq[],int bn)
{
int i;
for(i=bn-1;i>=0;i--)
cout<<da[i];
cout<<" ";
for(i=bn-1;i>=0;i--)
cout<<dq[i];
}
void main()
{
int b[5]={NULL},da[5]={NULL},dq[5]={
NULL},bc[5]={NULL};
int bn,dn,i,sc,e=0;
clrscr();
cout<<"\nEnter the divisor and the
dividend";
cout<<"\nenter the number of bits of the
divisor";
cin>>bn;
cout<<"\nenter divisor=";
for(i=bn-1;i>=0;i--)
cin>>b[i]; //store
the bits of divisor to b[]
sc=bn;
for(i=bn-1;i>=0;i--)
bc[i]=b[i]; //copy
the bits of b[] to bc[] for complement
complement(bc,bn); /*
calculates the 2's complements of bc[]
and
stores in bc[] itself */
dn=2*bn;
cout<<"\nThe no. of bits of the
dividend(2*no of bits of the divisor)="<<dn;
cout<<"\ndividend=";
for(i=bn-1;i>=0;i--)
cin>>da[i];
for(i=bn-1;i>=0;i--)
cin>>dq[i];
while(sc!=0)
{
shl(e,da,dq,bn); //shift
left operation
add(e,da,bc,bn); //subtracting da
and divisor
if(e==1)
{ dq[0]=e;
}
else if(e==0)
{ dq[0]=e;
add(e,da,b,bn); //restoring da
by adding divisor
}
sc--;
}
cout<<"\n\nresult:";
display(da,dq,bn);
getch();
}Output: