• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: C/C++
  • 标签: C语言  

资源简介

二进制加减法,多种乘法方式实现二进制乘法。

资源截图

代码片段和文件信息

#include 
#include 

#define  MAX_LEN   20

int init(int *Aint *B)
{
int in;
while(1==scanf(“%d“&n))
if(n > 0) break;

for(i=MAX_LEN-n;i < MAX_LEN;i++)
scanf(“%d“A+i);
for(i=MAX_LEN-n;i < MAX_LEN;i++)
scanf(“%d“B+i);

return n;
}

void bits_display(int *Aint n)
{
for(int i=MAX_LEN-n;i printf(“%d“A[i]);
printf(“\n“);
}

int bits_add(int *Aint *Bint *Cint n)
{
int icarrylen;
for(i=MAX_LEN-1carry=0;i>=MAX_LEN-n;i--)
{
C[i]=A[i]+B[i]+carry;
if(C[i] >= 2)
{
carry=1;
C[i]=C[i]%2;
}
else
carry=0;
}
len=n;
if(carry){ C[i]=carry;len++;}
return len;
}

void bits_sub(int *Aint *Bint *Cint n)
{//A>B A-B
int icarry;
for(i=MAX_LEN-1carry=0;i>=MAX_LEN-n;i--)
{
C[i]=A[i]-B[i]-carry;
if(C[i] < 0)
{
carry=1;
C[i]+=2;
}
else
carry=0;
}
C[i]=A[i]-carry;
}

int bits_multi(int *Aint *Bint *Cint n) //a*b(n bits)
{
if(n==1)
C[MAX_LEN-1]=A[MAX_LEN-1]*B[MAX_LEN-1];
else{
int a[MAX_LEN]={0}b[MAX_LEN]={0}c[MAX_LEN]={0}d[MAX_LEN]={0};
int ijmid;
if(n%2) n++;
mid=n/2;

for(i=MAX_LEN-mid-1j=MAX_LEN-1;i >= MAX_LEN-n;i--j--)
{
a[j]=A[i];
c[j]=B[i];
}
for(i=MAX_LEN-1;i >= MAX_LEN-mid;i--)
{
b[i]=A[i];
d[i]=B[i];
}


int ac_lenbd_len;
int ac[MAX_LEN]={0}bd[MAX_LEN]={0}a_bc_d[MAX_LEN]={0}ab_cd[MAX_LEN]={0}ac_bd[MAX_LEN]={0};



ac_len=bits_multi(acacn-mid);
bd_len=bits_multi(bdbdmid);

int a_b[MAX_LEN]={0}c_d[MAX_LEN]={0};
int a_b_lenc_d_lena_bc_d_lenac_bd_len;
a_b_len=bits_add(aba_bn-mid);
c_d_len=bits_add(cdc_dmid);
a_bc_d_len=bits_multi(a_bc_da_bc_d(a_b_len>c_d_len?a_b_len:c_d_len));



ac_bd_len=bits_add(acbdac_bd(ac_len>bd_len?ac_len:bd_len));
bits_sub(a_bc_dac_bdab_cd(a_bc_d_len > ac_bd_len?a_bc_d_len : ac_bd_len));


for(i=MAX_LEN-2*n;i if(i else ac[i]=0;
}
for(i=MAX_LEN-n-mid;i if(i else
ab_cd[i]=0;
}

bits_add(acbdC2*n);
bits_add(ab_cdCC2*n);
}

return 2*n;

}


int main()
{
int A[MAX_LEN]B[MAX_LEN];
int C[2*MAX_LEN]={0};//store result

int n=init(AB);
printf(“A:“);bits_display(An);
printf(“B:“);bits_display(Bn);
bits_multi(ABCn);
printf(“A*B:“);bits_display(C2*n);

return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2446  2011-09-07 15:41  bits_multi.cpp
     文件        5863  2015-12-10 17:36  c语言课程设计二进制计算器.c
     文件         525  2015-12-10 17:48  二进制乘法.txt
     文件        6876  2015-12-10 17:49  二进制乘法2.txt

评论

共有 条评论