#include <stdio.h>
#include <math.h>
void bin(int l,int *mat);
void add(int *tem1,int *tem2);
void shift(int *k,int *l,int *j);
void print(int *tem5,int *tem6, int b);
/*A[4]={0,0,0,0},Q[4],M[4]={0,0,0,0},c[4]={0,0,0,1},C1[8]={0,0,0,0,0,0,0,1};*/
int main()
{
int s,a,i,p,q,q1,m;
int ans[8],A[4]={0,0,0,0},Q[4],Q1=0,M[4]={0,0,0,0},c[4]={0,0,0,1},tee[4],C1[8]={0,0,0,0,0,0,0,1},x,z,d;
printf("\nEnter the two numbers\n ");
scanf("%d%d",&q,&m);
printf("\n");
printf("Binary equivalent of 1st no is ");
bin(q,Q);
printf("\n");
printf("Binary equivalent of 2nd no is ");
bin(m,M);
printf("\n\nOpr A Q Q(-1)");
printf("\n\nInit --- ") ;
print(A,Q,Q1);
i=0;
while(i<4)
{
if((Q[3]==0)&&(Q1==1))
{
add(A,M);
printf("\nA+M ---- ");
print(A,Q,Q1);
}
if((Q[3]==1)&&(Q1==0))
{
for(p=0;p<4;p++)
{tee[p]=M[p];
tee[p]=1-tee[p];
}
add(tee,c);
add(A,tee);
printf("\nA-M ---- ");
print(A,Q,Q1);
}
shift(A,Q,&Q1);
i++;
printf("\nShift -- ");
print(A,Q,Q1);
}
for(i=0;i< 4;i++)
ans[i]=A[i];
for(i=0;i< 4;i++)
ans[i+4]=Q[i];
if(((q< 0)&&(m>0))||((q>0)&&(m< 0)))
{
for(i=0;i< 8;i++)
ans[i]=1-ans[i];
for(i=7;i>=0;i--)
{
x = ans[i];
ans[i]=d^x^C1[i];
if(((d==1)&&(x==1))||((x==1)&&(C1[i]==1))||((C1[i]==1)&&(d==1)))
d=1;
else
d=0;
}
}
printf("\n\n");
for(i=0;i< 8;i++)
printf("%d",ans[i]);
s=0;z=0;
for(i=7;i>=0;i--)
{
s = s + (pow(2,z) * ans[i]);
z = z+1;
}
if(((q< 0)&&(m>0))||((q>0)&&(m< 0)))
printf("\nTHE ANSWER IN DECIMAL IS : -%d\n",s);
else
printf("\nTHE ANSWER IN DECIMAL IS : %d\n",s);
return 0;
}
void add(int *tem1,int *tem2)
{
int c=0,i,p;
for (i=3;i>=0;i--)
{
p= tem1[i];
tem1[i]=p^c^tem2[i];
if((p&&c) || (p&&tem2[i]) || (tem2[i]&&c))
c=1;
else c=0;
}
}
void bin(int l,int *mat)
{
int i,c[4]={0,0,0,1};
mat[i]=0;
if(l>0)
{
for(i=3;i>=0;i--)
{
mat[i]=l%2;
l = l/2;
}
}
else{
l= -1*l;
for(i=3;i>=0;i--)
{
mat[i]=l%2;
l= l/2;
mat[i]= 1-mat[i];
}
add(mat,c);
}
for(i=0;i<4;i++)
printf("%d",mat[i]);
}
void shift(int *tem3,int *tem4,int *j)
{
*j=tem4[3];
tem4[3]=tem4[2];
tem4[2]=tem4[1];
tem4[1]=tem4[0];
tem4[0]=tem3[3];
tem3[3]=tem3[2];
tem3[2]=tem3[1];
tem3[1]=tem3[0];
}
void print(int *tem5,int *tem6, int b)
{
int i;
for(i=0;i<4;i++)
printf("%d",tem5[i]);
printf(" ");
for(i=0;i<4;i++)
printf("%d",tem6[i]);
printf(" ");
printf("%d",b);
}