爲什麼,使用此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:夠公平的......我會在上面提及。 –