Loading

使用 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;
}

二进制转十进制

从右往左,第 \(n\) 位如果是 \(1\),则乘上 \(2^{n-1}\),为 \(0\) 则乘 \(0\),最后将值全部相加。

代码实现:

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;
}
posted @ 2023-07-23 01:28  belhomme  阅读(52)  评论(0编辑  收藏  举报