gpt4 book ai didi

c++ - XOR 运算符在 C++ 中无法正确评估

转载 作者:太空宇宙 更新时间:2023-11-04 14:54:47 24 4
gpt4 key购买 nike

我正在用 C++ 从头构建一个 BigInt 类,但有些事情让我抓狂:我的 XOR 工作不正常,我不知道为什么。我希望有人能启发我。下面是一个最小的工作示例:

class BigInt
{
private:
bool pos;
int size; // Number of binary digits to use
short compare(BigInt input);
public:
BigInt(long long input, int inSize) { pos = true; size = inSize; }
};

short BigInt::compare(BigInt input)
{
// Partial compare function for minimal working example
// Return:
// 1: (*this) > input
// 0: (*this) == input
// -1: (*this) < input

string a = (*this).toDecimal(), b = input.toDecimal();
bool c = (*this).size > input.size, d = (*this).pos ^ input.pos;

bool thispos = (*this).pos, inpos = input.pos;
bool xorpos = (thispos != inpos);

bool x = true, y = true;
bool z = x ^ y;

if ((*this).size > input.size || (*this).pos != input.pos)
return 1 - ((*this).pos ? 0 : 2);
else if ((*this).size < input.size)
return -1 + ((*this).pos ? 0 : 2);
return 0;
}

我在第一个 if 语句上有一个断点。以下是我在观察名单上的内容。

    thispos true    bool
inpos true bool
xorpos true bool
x true bool
y true bool
z false bool

有人知道这是怎么回事吗?我宁愿避免使用 if 语句。我从来没有遇到过如此简单地使用 XOR 的问题。

据我所知,应该没有错,但这些值中有些东西不会按照预期的方式进行评估。

编辑:将代码更改为最小的工作示例。

最佳答案

好吧,即使 ^ 是按位异或运算符,您的初始化

bool thispos = (*this).pos, inpos = input.pos;

需要将源值转换为 bool 类型。 bool 类型的值保证在算术上下文中充当 01。这意味着

bool xorpos = thispos ^ inpos;
如果 thisposinpos 最初都是 true<,则

需要用 false 初始化 xorpos/.

如果您观察到不同的行为,则可能是编译器中的错误。积分到 bool 的转换可能实现不正确或类似的事情。

另一个机会是有人“重新定义”了 bool 关键字,方法如下

#define bool unsigned char

这将在第一对初始化中禁用正确的 bool 语义,并导致 ^ 的按位性质影响结果。

关于c++ - XOR 运算符在 C++ 中无法正确评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21418770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com