2016-11-12 1 views
0

내가왜 비트 연산자를 스트림에서 직접 사용할 수 없습니까?

오류 오류를 가지고

#include <iostream> 
using namespace std; 
int main() { 
    short int a = 0xFFFD, b = 10; 
    cout << a | b; 
    return 0; 
} 

이 코드를 실행하지하는 중에 : 대한 일치를 '연산자 |'

#include <iostream> 
using namespace std; 
int main() { 
    short int a = 0xFFFD, b = 10, c; 
    c = a | b; 
    cout << c; 
    return 0; 
} 

누군가가 나를 설명 할 이유는 없습니다 :

그러나, 다른 변수에 결과를 저장하는 문제를 해결하는 것?

+0

ooperator 우선 순위 때문입니다. –

+0

'cout << (a | b);'여분의 변수는 필요 없으며 잘 배치 된 괄호 쌍만 필요합니다. –

+1

http://en.cppreference.com/w/cpp/language/operator_precedence –

답변

3
cout << a | b; 

이 동일합니다 참된.

예,이 여기에 직관적 인

cout << (a | b); 

하지만 그건 (자신의 변수에 a | b을 미리 저장 비슷한 효과가 있습니다.) :

적절한 위치에 괄호를 넣어 표현식을 수정 <<이 "비트 왼쪽 시프트"의 기본 의미에서 "재사용"되었기 때문에 해당 기본 의미로 인해 |우선 순위가<<보다 낮은 것으로 원래 결정되었다고 판단했기 때문입니다.

3

문제는 비트 연산자 | 시프트 연산자와 비교할 때 우선 순위가 낮습니다. |

따라서이 문장

cout << a | b; 

는 문

(cout << a) | b; 

에 해당하고 더 오버로드 된 연산자가 없다 오류 메시지의 나머지 부분을 읽어 보면

(cout << a) | b; 

, 당신이 인이 더 operator|(ostream&, short int)을 말하고되지 있다고 볼 수 있습니다 : 유형의 왼쪽 피연산자에 std::osteram

관련 문제