为什么,在C ++中使用这个xor时,
int main() {
bitset<4> a=1100, b=0110,c;
c = a ^ b;
cout << c;
return 0;
}
结果是0100?
答案 0 :(得分:20)
这些常量不是二进制的,这就是原因。 1100十进制是10001001100
二进制。 0110 octal 是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;
}
或者,以十六进制指定常量:
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;
}
答案 1 :(得分:2)
问题是文字1100和0110不是二进制文字。第一个是十进制文字1100,第二个是八进制文字0110,十进制等于24.您应该使用字符串文字来获得所需的结果。例如,考虑以下代码snipet的结果
std::bitset<4> a = 1100, b = 0110, c;
c = a ^ b;
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
std::cout << "c = " << c << std::endl;
std::bitset<4> a1( "1100" ), b1( "0110" ), c1;
c1 = a1 ^ b1;
std::cout << "a1 = " << a1 << std::endl;
std::cout << "b1 = " << b1 << std::endl;
std::cout << "c1 = " << c1 << std::endl;