试图在 c++ 中制作一个简单的加法器。编译成功但输出错误
Tried to make a simple adder in c++.Compiled successfully but the output is wrong
创建了 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;
}
您需要先添加最低有效位,而不是最高有效位:
for(int i=9;i>-1;i--)
{
Z[i]=adder_prim(X[i],Y[i],C);
C=adder_carry(X[i],Y[i],C);
}
创建了 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;
}
您需要先添加最低有效位,而不是最高有效位:
for(int i=9;i>-1;i--)
{
Z[i]=adder_prim(X[i],Y[i],C);
C=adder_carry(X[i],Y[i],C);
}