这个xor有什么错误

Bla*_*rog 3 c++ xor

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

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

结果0100?

Joe*_*e Z 20

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

当你将两者都截断为4位时,你得到1100二进制的二进制XOR 1000,它给出0100二进制.

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

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

或者,以十六进制指定常量:

int main() {
    bitset<4> a=0xC, b=0x6,c;
    c = a ^ b;
    cout << c;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者作为字符串常量:(C++ 11)

int main() {
    bitset<4> a( "1100" ), b( "0110" ),c;
    c = a ^ b;
    cout << c;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)