为什么,使用此XOR在C++中,什么是与此异或错误
int main() {
bitset<4> a=1100, b=0110,c;
c = a^b;
cout << c;
return 0;
}
是结果0100什么时候?
为什么,使用此XOR在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=0xC, b=0x6,c;
c = a^b;
cout << c;
return 0;
}
或字符串常量::(C
int main() {
bitset<4> a=0b1100, b=0b0110,c;
c = a^b;
cout << c;
return 0;
}
或者,在十六进制指定常数++ 11)
int main() {
bitset<4> a("1100"), b("0110"),c;
c = a^b;
cout << c;
return 0;
}
问题是升als 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;
八进制0110是十进制的72。但你有正确的想法。 –
我的错误。我没有乘8乘8,而是乘2乘8乘8 :) –
二进制文字('0b ...')不是标准C++的一部分(虽然在C++ 14中)。一些编译器将它们作为扩展来实现。 – interjay
@Joe Z非常感谢:D你救了我:D – BlackProg
@interjay:够公平的......我会在上面提及。 –