温馨提示:此文章仅供个人学习使用,不得用作其他用途,转载请注明出处!
文章目录
- 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. 代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105#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语言内容请搜索靠谱客的其他文章。
发表评论 取消回复