【问题标题】:Tried to make a simple adder in c++.Compiled successfully but the output is wrong试图在c++中做一个简单的加法器。编译成功但输出错误
【发布时间】:2019-03-29 14:33:25
【问题描述】:

创建了 NOT、AND、OR 和 XOR 函数(使用 NAND),然后为主输出和进位创建了“adder_prim”和“adder_carry”函数。使用标准的全加器电路并将其放入一个循环中(10 个循环,因此应该能够添加到 2031 年)。

在代码本身中输入输入(X 是 139,Y 是 74)只是为了查看它是否正常工作。

不是 216(正确答案)而是 196,我不知道为什么。


int NAND(int i,int j)
{
    int A;
    A=((i==1)&&(j==1))?0:1;
    return A;
}

int NOT(int i)
{
    int A=NAND(i,i);
    return A;
}

int AND(int i,int j)
{
    int A=NOT(NAND(i,j));
    return A;
}

int OR(int i,int j)
{
    int A=NAND((NAND(i,i)),NAND(j,j));
    return A;
}

int XOR(int i,int j)
{
    int A=OR(AND(i,NOT(j)),AND(NOT(i),j));
    return A;
}

int adder_prim(int,int,int);
int adder_carry(int,int,int);

int _tmain(int argc, _TCHAR* argv[])
{
    int Z[10];
    int C=0;

    int X[]={0,0,1,0,0,0,1,0,1,1};
    int Y[]={0,0,0,1,0,0,1,0,1,0};

    for(int i=0;i<10;i++)
    {
        Z[i]=adder_prim(X[i],Y[i],C);
        C=adder_carry(X[i],Y[i],C);
    }

    for(int j=0;j<10;j++)
    {
        cout <<Z[j];
    }

    getch();
    return 0;
}

int adder_prim(int a,int b,int c)
{
    int O=XOR(XOR(a,b),c);
    return O;
}

int adder_carry(int a,int b,int c)
{
    int C=OR(AND(XOR(a,b),c),AND(a,b));
    return C;
}

【问题讨论】:

  • 您是否尝试过使用调试器单步执行您的代码?
  • 调试器告诉你什么?
  • int _tmain(int argc, _TCHAR* argv[]) 意味着你有一个很好的集成调试器。我的建议是花 20 分钟学习如何单步执行代码来查看变量。我的第二个建议是简化您的调试示例。让 X 和 Y 保持一个 3 或 4 位数字。这可能有助于您的调试,因为步骤较少。在您逐步执行代码时,将结果与您在纸和笔上手动计算的结果进行比较。

标签: c++ boolean-logic boolean-operations


【解决方案1】:

您需要先添加最低有效位,而不是最高有效位:

for(int i=9;i>-1;i--)
{
    Z[i]=adder_prim(X[i],Y[i],C);
    C=adder_carry(X[i],Y[i],C);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2019-05-10
    • 2016-03-19
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多