首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制逻辑仿真器逻辑错误

二进制逻辑仿真器逻辑错误
EN

Stack Overflow用户
提问于 2012-09-11 18:30:55
回答 1查看 193关注 0票数 0

如果你需要更多的信息,尽管问。

我要做的就是用C++代码来模拟在计算机上可以找到的布尔逻辑。现在我正在尝试创建一个32位加法器。当我运行测试代码时,我得到的输出是32,这是错误的,它应该是64。我相当确定我的add函数是正确的。这些门的代码是:

代码语言:javascript
复制
bool and(bool a, bool b)
{
return nand(nand(a,b),nand(a,b));
}

bool or(bool a, bool b)
{
return nand(nand(a,a),nand(b,b));
}

bool nor(bool a, bool b)
{
return nand(nand(nand(a,a), nand(b,b)),nand(nand(a,a), nand(b,b)));
}

add函数的代码如下:

代码语言:javascript
复制
bool *add(bool a, bool b, bool carry)
{
static bool out[2];

out[0] = nor(nor(a, b), carry);
out[1] = or(and(b,carry),and(a,b));

return out;
}

bool *add32(bool a[32], bool b[32], bool carry)
{
static bool out[33];
bool *tout;

for(int i = 0; i < 32; i++)
{
    tout = add(a[i], b[i], (i==0)?false:tout[1]);
    out[i] = tout[0];
}
out[32] = tout[1];

return out;
}

我用来测试的代码是:

代码语言:javascript
复制
bool *a = int32tobinary(32);
bool *b = int32tobinary(32);
bool *c = add32(a, b, false);
__int32 i = binarytoint32(c);

这两个函数是:

代码语言:javascript
复制
bool *int32tobinary(__int32 a)
{
static bool _out[32];
bool *out = _out;
int i;

for(i = 31; i >= 0; i--)
{
    out[i] = (a&1) ? true : false;
    a >>= 1;
}

return out;
}

__int32 binarytoint32(bool b[32])
{
int result = 0;
int i;

for(i = 0; i < 32; i++)
{
    if(b[i] == true)
        result += (int)pow(2.0f, 32 - i - 1);
}

return result;
}
EN

回答 1

Stack Overflow用户

发布于 2012-09-11 18:57:30

从哪里开始?

正如注释中所指出的,返回指向静态变量的指针是错误的。

代码语言:javascript
复制
out[0] = nor(nor(a, b), carry); 

应该是

代码语言:javascript
复制
out[0] = xor(xor(a, b), carry);

这个out[1] = or(and(b,carry),and(a,b));也是不正确的。当a == truecarry == true时,out[1]必须为true

add32假设索引0为最低有效位,int32tobinaryint32tobinary假设索引0为最低有效位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12367752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档