异或门、全加器和8位加法器
昨天把第12章 二进制加法器读完了,用 C 语言写了一个异或门(XOR)函数和8个全加器函数。然后用这8个全加器组成了一个8位加法器。
代码部分
输入两组 8 bit 的二进制数, 输出一个 9 bit 的结果
输入示例
0 1 1 0 0 1 0 1
1 0 1 1 0 1 1 0
输出示例
1 0 0 0 1 1 0 1 1
代码
#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 FullAdder0(bool OI, bool A, bool B);
bool FullAdder1(bool OI, bool A, bool B);
bool FullAdder2(bool OI, bool A, bool B);
bool FullAdder3(bool OI, bool A, bool B);
bool FullAdder4(bool OI, bool A, bool B);
bool FullAdder5(bool OI, bool A, bool B);
bool FullAdder6(bool OI, bool A, bool B);
bool FullAdder7(bool OI, bool A, bool B);
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;
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;
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);
FullAdder0(0, A0, B0);
FullAdder1(CO0, A1, B1);
FullAdder2(CO1, A2, B2);
FullAdder3(CO2, A3, B3);
FullAdder4(CO3, A4, B4);
FullAdder5(CO4, A5, B5);
FullAdder6(CO5, A6, B6);
FullAdder7(CO6, A7, B7);
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 FullAdder0(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S0 = XOR(OI, S);
CO0 = OR(CO, AND(OI, S));
}
bool FullAdder1(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S1 = XOR(OI, S);
CO1 = OR(CO, AND(OI, S));
}
bool FullAdder2(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S2 = XOR(OI, S);
CO2 = OR(CO, AND(OI, S));
}
bool FullAdder3(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S3 = XOR(OI, S);
CO3 = OR(CO, AND(OI, S));
}
bool FullAdder4(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S4 = XOR(OI, S);
CO4 = OR(CO, AND(OI, S));
}
bool FullAdder5(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S5 = XOR(OI, S);
CO5 = OR(CO, AND(OI, S));
}
bool FullAdder6(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S6 = XOR(OI, S);
CO6 = OR(CO, AND(OI, S));
}
bool FullAdder7(bool OI, bool A, bool B){
bool CO = AND(A, B);
bool S = XOR(A, B);
S7 = XOR(OI, S);
CO7 = OR(CO, AND(OI, S));
}