#include<stdio.h>
int Binary_add(int* Binary1,int* Binary2)
{
int i;
for(i=31;i>0;i--)
{
Binary2[i]+=Binary1[i];
if(Binary2[i]>1)
{
Binary2[i]-=2;
Binary2[i-1]++;
}
}
if(Binary2[0]>1)
{
Binary2[0]-=2;
return 1;
}
else return 0;
}
int main(void)
{
int Product1_register[32];
int Product2_register[32];
int i,j;
int PY_register[64];
int C_register;
printf("请输入需要进行相乘的两个二进制原码(32位):\n");
for(i=0;i<32;i++)
{
scanf("%d",&Product1_register[i]);
}
for(i=0;i<32;i++)
{
scanf("%d",&Product2_register[i]);
}
for(i=0;i<32;i++)
{
PY_register[i]=0;
}
for(i=32;i<64;i++)
{
PY_register[i]=Product2_register[i-32];
}
printf("被乘数寄存器中的值保持不变如下:\n");
for(i=0;i<32;i++)
{
printf("%d",Product1_register[i]);
}
printf("\n");
printf("递推次数\t乘积寄存器\t 乘数寄存器\n");
printf("第0次递推\t");
for(j=0;j<64;j++)
{
if(j==32)printf("\t");
printf("%d",PY_register[j]);
}
printf("\n");
for(i=0;i<32;i++)
{
if(PY_register[63]==1)
{
C_register=Binary_add(Product1_register,PY_register);
}
for(j=63;j>0;j--)
{
PY_register[j]=PY_register[j-1];
}
PY_register[0]=C_register;
printf("第%d次递推\t",i+1);
for(j=0;j<64;j++)
{
if(j==32)printf("\t");
printf("%d",PY_register[j]);
}
printf("\n");
}
return 0;
}
|