温馨提示:此文章仅供个人学习使用,不得用作其他用途,转载请注明出处!
8-BIT RIPPLE CARRY ADDER “8 位行波进位加法器”
如何理解
逻辑门
?点击链接查看:https://blog.csdn.net/weixin_43527871/article/details/97398886还不了解
加法器原理
?点击链接查看:https://blog.csdn.net/weixin_43527871/article/details/97402183推荐学习视频: 网易公开课 :10分钟速成课:计算机科学
代码实现:
#include<stdio.h>
int CARRY=0;//进位
int SUM=0;
int SUM_AandB[8];
int AND(int A, int B);
int OR(int A, int B);
int XOR(int A, int B);
void HALF_ADDER(int A,int B);
void FULL_ADDER(int A,int B,int C);
void _8BIT_ADDER(int *A,int *B);
int main(void)
{
int A,B,C=0;
int A_a[8],B_b[8];
for(int i=0; i<8; i++ )
{
SUM_AandB[i]=0;
}
printf("请输入 8位 二进制数 A :\n");
for(int i=0; i<8; i++ )
{
scanf("%d",&A_a[i]);
}
printf("请输入 8位 二进制数 B :\n");
for(int i=0; i<8; i++ )
{
scanf("%d",&B_b[i]);
}
_8BIT_ADDER(A_a,B_b);
//以下可以注释。
printf("\n\n");
printf(" ");
for(int i=0; i<8; i++ )
{
printf("%d_",A_a[i]);
}
printf("\n\n");
printf("+ ");
for(int i=0; i<8; i++ )
{
printf("%d_",B_b[i]);
}
printf("\n");
printf("__");
for(int i=0; i<8; i++ )
{
printf("__");
}
printf("\n");
printf(" ");
for(int i=0; i<8; i++)
{
printf("%d_",SUM_AandB[i]);
}
//以上可以注释。
printf("\n\n\n二进制数 A 和 B 的和为:\n\n ");
for(int i=0; i<8; i++)
{
printf("%d_",SUM_AandB[i]);
}
printf("\n\n\n\n\n\n\n\n\n");
return 0;
}
/**/
int AND(int A, int B)//与门
{
int AandB;
if(A*B==0)
{
AandB=0;
}
else
AandB=1;
return AandB;
}
int OR(int A, int B)//或门
{
int AorB;
if(A+B==0)
{
AorB=0;
}
else
AorB=1;
return AorB;
}
int XOR(int A, int B)//异或门
{
int AxorB;
if(A==B)
{
AxorB=0;
}
else
AxorB=1;
return AxorB;
}
void HALF_ADDER(int A,int B)//半加器
{
CARRY=AND(A,B);
SUM=XOR(A,B);
}
void FULL_ADDER(int A,int B,int C)//全加器
{
int FULL_CARRY;
HALF_ADDER(A,B);
FULL_CARRY=CARRY;
HALF_ADDER(SUM,C);
CARRY=OR(FULL_CARRY,CARRY);
}
void _8BIT_ADDER(int *A,int *B)//加法器
{
HALF_ADDER(A[7],B[7]);//半加器
SUM_AandB[7]=SUM;
FULL_ADDER(A[6],B[6],CARRY);//全加器
SUM_AandB[6]=SUM;
FULL_ADDER(A[5],B[5],CARRY);//全加器
SUM_AandB[5]=SUM;
FULL_ADDER(A[4],B[4],CARRY);//全加器
SUM_AandB[4]=SUM;
FULL_ADDER(A[3],B[3],CARRY);//全加器
SUM_AandB[3]=SUM;
FULL_ADDER(A[2],B[2],CARRY);//全加器
SUM_AandB[2]=SUM;
FULL_ADDER(A[1],B[1],CARRY);//全加器
SUM_AandB[1]=SUM;
FULL_ADDER(A[0],B[0],CARRY);//全加器
SUM_AandB[0]=SUM;
}
/**/