之前写那个加法器存在的问题
昨天刚学习了指针,发现之前写的那个加法器存在问题,加法器一共用了 8 个全加器(Full Adder)函数,如果是做一个16位加法那岂不是要用到16个全加器函数。。。。
利用指针传送地址的功能解决了上面的问题,用一个全加器函数(FullAdder)就制作出了8位加法器,无论是多少位的加法器,都可以用这一个Full Adder函数来制作。
代码部分
#include <stdio.h>
#include <stdbool.h>
bool AND(bool x, bool y);
bool OR(bool x, bool y);
bool NAND(bool x, bool y);
bool NOR(bool x, bool y);
bool INVERTER(bool x);
bool BUFFER(bool x);
bool XOR(bool x, bool y);
bool FullAdder(bool OI, bool A, bool B, int *S, int *CO);
int main(){
int A0=0, A1=0, A2=0, A3=0, A4=0, A5=0, A6=0, A7=0;
int B0=0, B1=0, B2=0, B3=0, B4=0, B5=0, B6=0, B7=0;
int n=0, m=0, y=0;
int S0=0, S1=0, S2=0, S3=0, S4=0, S5=0, S6=0, S7=0;
int CO0=0, CO1=0, CO2=0, CO3=0, CO4=0, CO5=0, CO6=0, CO7=0;
printf(" ");
scanf("%d %d %d %d %d %d %d %d", &A7, &A6, &A5, &A4, &A3, &A2, &A1, &A0);
printf(" ");
scanf("%d %d %d %d %d %d %d %d", &B7, &B6, &B5, &B4, &B3, &B2, &B1, &B0);
FullAdder(0, A0, B0, &S0, &CO0);
FullAdder(CO0, A1, B1, &S1, &CO1);
FullAdder(CO1, A2, B2, &S2, &CO2);
FullAdder(CO2, A3, B3, &S3, &CO3);
FullAdder(CO3, A4, B4, &S4, &CO4);
FullAdder(CO4, A5, B5, &S5, &CO5);
FullAdder(CO5, A6, B6, &S6, &CO6);
FullAdder(CO6, A7, B7, &S7, &CO7);
printf("%d %d %d %d %d %d %d %d %d\n", CO7, S7, S6, S5, S4, S3, S2, S1, S0);
return 0;
}
bool AND(bool x, bool y){
bool ret = 0;
if(x && y) ret = 1;
return ret;
}
bool OR(bool x, bool y){
bool ret = 0;
if(x || y) ret = 1;
return ret;
}
bool NAND(bool x, bool y){
bool ret = 1;
if(x && y) ret = 0;
return ret;
}
bool NOR(bool x, bool y){
bool ret = 1;
if(x || y) ret = 0;
return ret;
}
bool INVERTER(bool x){
bool ret = !x;
return ret;
}
bool BUFFER(bool x){
bool ret = x;
return ret;
}
bool XOR(bool x, bool y){
bool ret = 0;
ret = AND(OR(x, y), NAND(x, y));
return ret;
}
bool FullAdder(bool OI, bool A, bool B, int *S, int *CO){
bool xCO = AND(A, B);
bool xS = XOR(A, B);
*S = XOR(OI, xS);
*CO = OR(xCO, AND(OI, xS));
}