我是靠谱客的博主 无奈红牛,最近开发中收集的这篇文章主要介绍C语言 半加器与全加器 详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

温馨提示:此文章仅供个人学习使用,不得用作其他用途,转载请注明出处!

文章目录

    • 1. 半加器
    • 2.全加器
    • 3. 代码实现:

1. 半加器

最简单的加法电路是拿 2个bit 加在一起(bit是0或1) 有2个输入: A和B , 1个输出: 就是两个数字的和
需要注意的是 A、B 、输出 。这3个都是单个bit(0或1) **输出只有四种可能。前三个是: 0+0=0、 1+0=0、 0+1=1 ** 记住二进制里 ,1与true相同,0与false相同
这组输入和输出,和XOR门(异或门:相同为0,不同为1)的逻辑完全一样

在这里插入图片描述

但第四个输入组合,1+1,是个特例;1+1=2(显然),但进制里没有2,实际上,二进制1+1的结果是0, 1进到了下一位
XOR门的输出,只对了一部分,1+1输出0。 但我们需要额外的线代表“进位。” 只有输入是1和1时,进位才是“true”。因为算出来的结果用1个bit存不下,方便的是,我们刚好有个逻辑门能做这个事。 AND门,只有当两个输入都为“true”,输出才为“true”(“全1才1”);所以我们把它加到电路中,叫做“半加器”

在这里插入图片描述

把半加器封装成一个单独组件:

在这里插入图片描述

推荐学习视频: 10分钟速成课:计算机科学

如何理解逻辑门?点击链接查看:https://blog.csdn.net/weixin_43527871/article/details/97398886

如何计算二进制加法?点击链接查看:https://blog.csdn.net/weixin_43527871/article/details/97400100

2.全加器

如果想处理超过1+1的计算,我们需要“全加器”
半加器输出了进位,意味着我们计算下一列的时候,还有之后每一列,我们得加三个位在一起,并不是两个。 全加器复杂了一点点 有三个输入:A,B, C(都是一个bit)

在这里插入图片描述

所以最大可能是1+1+1, “总和”1 “进位”1 所以要两条输出线:“总和” 和 “进位”
我们可以用半加器做全加器 我们先用半加器将A和B相加 然后把C输入到第二个半加器 最后用一个 OR门 (或门:有1则1,全0才0) 检查进位是不是true 这样就做出了一个全加器

在这里插入图片描述

3. 代码实现:

#include<stdio.h>

int CARRY=0;
int SUM=0;
	
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);

int main(void)
{
	int A,B,C=0;
	int S;
	
	printf("请输入状态A与状态B: ");
	scanf("%d%d",&A,&B);
	
	S=AND(A,B);
	printf("n执行 与门  A*B  操作为:");
	printf("%d",S);

	S=OR(A,B);
	printf("n执行 或门  A+B  操作为:");
	printf("%d",S);
 
	HALF_ADDER(A,B);
	printf("n半加器 执行 加法 操作 进位 为:");
	printf("%d",CARRY); 
	printf("n半加器 执行 加法 操作 和 为:");
	printf("%d",SUM); 
	
	FULL_ADDER(A,B,C);
	printf("n全加器 执行 加法 操作 进位 为:");
	printf("%d",CARRY); 
	printf("n全加器 执行 加法 操作 和 为:");
	printf("%d",SUM);
	
	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);
} 


/**/

最后

以上就是无奈红牛为你收集整理的C语言 半加器与全加器 详解的全部内容,希望文章能够帮你解决C语言 半加器与全加器 详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部