使用 C 语言实现全加器
逻辑门电路#
与门(AND)#
真值表:
A | B | A AND B |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
代码实现:
int AND(int a, int b)
{
if ((a == 1) && (b == 1))
{
return 1;
}
return 0;
}
或门(OR)#
真值表:
A | B | A OR B |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
代码实现:
int OR(int a, int b)
{
if ((a == 0) && (b == 0))
{
return 0;
}
return 1;
}
非门(NOT)#
真值表:
A | NOT A |
---|---|
1 | 0 |
0 | 1 |
代码实现:
int NOT(int a)
{
if (a == 0)
{
return 1;
}
return 0;
}
异或(XOR)#
真值表:
A | B | A XOR B |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
代码实现:
int XOR(int a, int b)
{
if (a == b)
{
return 0;
}
return 1;
}
进制转换#
十进制转二进制#
方法:除二取余,逆序排列
代码实现:
int *binary(int number, int *b)
{
for (int i = 7; i >= 0; i--)
{
b[i] = number % 2;
number /= 2;
}
return b;
}
二进制转十进制#
从右往左,第
代码实现:
int decimal(int b[])
{
int output = 0;
for (int i = 0; i < 8; i++)
{
if (b[i] == 1)
{
output += pow(2, 7 - i);
}
}
return output;
}
全加器的实现#
代码实现:
int FA(int a, int b)
{
int output = 1;
int aa[8];
int *A;
A = binary(a, aa);
int bb[8];
int *B;
B = binary(b, bb);
int C[8] = {0};
C[7] = AND(A[7], B[7]);
int S[8] = {0};
for (int i = 6; i >= 0; i--)
{
int AxorB = XOR(A[i], B[i]);
int AB = AND(A[i], B[i]);
int CAxorB = AND(AxorB, C[i + 1]);
C[i] = OR(AB, CAxorB);
}
for (int i = 7; i >= 0; i--)
{
int AxorB = '0' + XOR(A[i], B[i]);
S[i] = XOR(AxorB, '0' + C[i + 1]);
}
output = decimal(S);
return output;
}
作者:龙琰
出处:https://www.cnblogs.com/bellongyan/p/FAwithC.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
标签:
计算机组成原理
Buy me a cup of coffee ☕.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战