c++ - 这个异或有什么错误

标签 c++ xor

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

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/

相关文章:

c++ - boost::format() 输出运算符

c++ - 没有默认构造函数的重复元素模板化数组

Python 异或运算和 ser.read()

c++ - glDrawElements 可以独立于多边形类型使用吗?

c++ - 基于 Qt 的 UI 是否足够可靠以用于医疗设备?

c# - 使用C#/C++,是否可以限制网络流量?

objective-c - Swift IOS 中的异或加密

c# - C# 中的 BitArrays 有问题吗?

c++ - 基于位掩码从值中异或所有位的最快方法?

javascript - XOR 神经网络返回垃圾