二进制加法器 优化代码版

之前写那个加法器存在的问题

昨天刚学习了指针,发现之前写的那个加法器存在问题,加法器一共用了 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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值