为什么,在 C++ 中使用这个异或时,

int main() {
    bitset<4> a=1100, b=0110,c;
    c = a ^ b;
    cout << c;
    return 0;
}

结果是0100吗?

最佳答案

这些常量不是二进制的,这就是原因。 1100 十进制是 10001001100 二进制。 0110 八进制是 1001000 二进制。 (为什么第二个是八进制的?因为一个以前导零开头且仅包含数字 0..7 的常量在 C++ 中是八进制的。)

当您将两者都截断为 4 位时,您会得到 1100 二进制文件与 1000 二进制文件的异或,从而得到 0100 二进制文件。

试试这个(假设你的编译器支持二进制文字的非标准前缀 0b ):

int main() {
    bitset<4> a=0b1100, b=0b0110,c;
    c = a ^ b;
    cout << c;
    return 0;
}

或者,以十六进制指定常量:
int main() {
    bitset<4> a=0xC, b=0x6,c;
    c = a ^ b;
    cout << c;
    return 0;
}

或作为字符串常量:(C++11)
int main() {
    bitset<4> a( "1100" ), b( "0110" ),c;
    c = a ^ b;
    cout << c;
    return 0;
}

关于c++ - 这个异或有什么错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20458276/

10-11 00:48