2013-12-08 27 views

回答

20

那些常量不是二進制的,這就是爲什麼。 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; 
} 
+1

二進制文字('0b ...')不是標準C++的一部分(雖然在C++ 14中)。一些編譯器將它們作爲擴展來實現。 – interjay

+0

@Joe Z非常感謝:D你救了我:D – BlackProg

+0

@interjay:夠公平的......我會在上面提及。 –

2

問題是升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; 
+0

八進制0110是十進制的72。但你有正確的想法。 –

+0

我的錯誤。我沒有乘8乘8,而是乘2乘8乘8 :) –