2013-12-08 1 views

답변

20

이러한 상수는 2 진수가 아니기 때문에 그 이유가 있습니다. 1100 십진수는 10001001100 바이너리입니다. 0110 8 진수1001000 바이너리입니다. (왜 선행 0으로 시작하고 0.7로 시작하는 상수는 C++에서 8 진수이기 때문에)

두 비트를 모두 4 비트로 자르면 1100 바이너리 XOR을 얻게됩니다. 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; 
} 

다른 방법은 16 진수에 상수를 지정 ++ 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와 같습니다. 원하는 결과를 얻으려면 문자열 리터럴을 사용해야합니다. 예를 들어, 다음 코드 스 니펫의 결과를 고려하십시오.

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

Octal 0110은 십진수 72입니다. 그러나 당신은 올바른 생각을 가지고 있습니다. –

+0

내 실수. 나는 8에 8을 곱하지 않았지만 2로는 myltiply 8을 곱하지 않았다. :) –

관련 문제