如果您需要更多信息,请询问。
我要做的是模拟可以在C ++代码中的计算机上找到的布尔逻辑。现在我正在尝试创建一个32位加法器。当我运行测试代码时,我得到32的输出,这是错误的应该是64.我很确定我的add
函数是正确的。这些门的代码是:
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)));
}
添加功能的代码:
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;
}
我用来测试它的代码是:
bool *a = int32tobinary(32);
bool *b = int32tobinary(32);
bool *c = add32(a, b, false);
__int32 i = binarytoint32(c);
这两个功能是:
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;
}
答案 0 :(得分:1)
从哪里开始?
如评论中所述,返回指向静态变量的指针是错误的。
这个
out[0] = nor(nor(a, b), carry);
应该是
out[0] = xor(xor(a, b), carry);
此out[1] = or(and(b,carry),and(a,b));
也不正确。在out[1]
和true
时,a == true
必须为carry == true
。
add32
假定索引0为LSB,int32tobinary
和int32tobinary
假设索引0为MSB。