用 C 语言模拟 8 位二进制加法器

异或门、全加器和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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值