为什么,在C++中使用这个xor时,
int main() {
bitset<4> a=1100, b=0110,c;
c = a ^ b;
cout << c;
return 0;
}
结果是0100吗?
发布于 2013-12-08 11:59:13
这些常量不是二进制的,这就是为什么。1100年的小数是10001001100
二进制。0110八进制是1001000
二进制。(第二个为什么是八进制?因为以前导零开头且仅由数字0..7组成的常量在C++中是八进制的。)
当将两者截断为4位时,您将得到1100
二进制XORed和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;
}
发布于 2013-12-08 12:11:57
问题是,文本1100和0110不是二进制文本。第一个是十进制文字1100,第二个是小数等于24的八进制文字0110。您应该使用字符串文本来实现所需的结果。例如,考虑以下代码片段的结果
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;
https://stackoverflow.com/questions/20458276
复制