源码一位除法 不恢复余数法

/*源码一位除法*/


#include<stdio.h>

#include<stdlib.h>


int x[]={0,0,1,0,0,1}, y[]={0,0,1,0,1,1}, fy[]={1,1,0,1,0,1};


void myDiv(int *x,int *y)

{

int Cn=0,tmp=0;

int i,j,k=0;

int shang=0,s[5];

int rlt[6];

for(j=5;j>=0;j--)

{

tmp=(x[j]+fy[j]+Cn)/2;

rlt[j]=(x[j]+fy[j]+Cn)%2;

Cn=tmp;

}

for(i=5;i>=2;i--)

{

if((rlt[0]==0)&&(rlt[1]==0))

{

shang=1;

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

{

rlt[j]=rlt[j+1];

}

rlt[5]=0;

s[k++]=shang;

Cn=0;

for(j=5;j>=0;j--)

{

tmp=(rlt[j]+fy[j]+Cn)/2;

rlt[j]=(rlt[j]+fy[j]+Cn)%2;

Cn=tmp;

}

}

else 

if((rlt[0]==1)&&(rlt[1]==1))

{

shang=0;

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

{

rlt[j]=rlt[j+1];

}

rlt[5]=0;

s[k++]=shang;

Cn=0;

for(j=5;j>=0;j--)

{

tmp=(rlt[j]+y[j]+Cn)/2;

rlt[j]=(rlt[j]+y[j]+Cn)%2;

Cn=tmp;

}

}

}

if((rlt[0]==0)&&(rlt[1]==0)) s[k++]=1;

else s[k++]=0;


printf("商是 \n ");

for(j=0;j<5;j++) printf("%d ",s[j]);

printf("\n余数是 (2^(-4)) \n ");

for(j=2;j<=5;j++) printf("%d ",rlt[j]);

}

void main()

{

myDiv(x,y);

}

你可能感兴趣的:(源码一位除法 不恢复余数法)