概述
温馨提示:此文章仅供个人学习使用,不得用作其他用途,转载请注明出处!
文章目录
- 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语言 半加器与全加器 详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复