2010-04-17 5 views
12

나는 다음과 같은 코드를 가지고 있고 그것이 의미 하는가를 이해 할 수 없습니다C++에서 "| ="연산의 의미는 무엇입니까?

var1 |= var2>0 ? 1 : 2; 

누구나 제발 도움이 될 수 있습니다!

+1

는 CS, 그것은라고는 "COM 파운드 할당 ". –

+2

언어를 읽어야합니다. 참고 자료 : – starblue

+0

참고 자료 : Java 제공. 'int var1, var2'. – polygenelubricants

답변

21
if (var2 > 0) 
    var1 = var1 | 1; 
else 
    var1 = var1 | 2; 

그것은 비트 또는이다.

12

모든 a op= b 연산자는 a = a op b의 바로 가기입니다.

그러나 C++에서는 opop=을 별도로 재정의 할 수 있으므로 일관성을 위해 각 사용자 지정 유형 구현자가 의존합니다.

+1

나는'@'과'@ ='에 다른 임무를 수행하는 악의적 인 사람을 생각할 것이다 : –

+1

@Matthieu : C++은 너 자신에게 매달려있는 로프를 많이주는 언어이다. – Richard

+0

나는 다른 행동을하기 위해 그것들을 구현하는 사람을 알지 못한다. (복합 할당은 분명히 왼손 피연산자를 변경한다는 것을 제외하고). 하지만 다른 하나없이 구현하는 것은 매우 일반적입니다. iostreams 삽입 연산자. –

2

운영자는 | = 비트 OR 연산자로 할당을 의미 다른 사람들이이 v1 = v1 | v2; 또 다른 사용을 위해 사용자가 건너 올 수도 부울 함께 짧은 말했듯이

4

.
을 감안할 때 :

bool b = /*some value*/ 

대신 말하는 :

if(a) 
    b = true; 

당신이 표시 될 수 있습니다

b |= a; 
6

cond ? x : y 반환 콘드이 사실이고 y 그렇지 x합니다. 읽기 Ternary Operator

a |= ba | b

a | ba하려면 abbitwise OR입니다 할당되어 a = a | b의 약어입니다. (예 : 2 | 3 = 3 및 1 | 2 = 3)

+0

2 | 3 = 3, 맞죠? – Cowan

+0

@ 코완 : 감사와 업데이 트되었습니다. –

3

내가 언급하기 전에 다른 사람들이 언급했듯이, 비트 OR로 과제를 완료하게됩니다.

비트 단위 OR은 왼쪽 및 오른쪽 비트 패턴을 취하여 서로 위에 놓을 수 있습니다.

각 열에서 : 0 + 1은 0, 1은 0, 1은 +1, 1 + 1은 1을 나타냅니다.
부 울린의 컨텍스트에서 : false 또는 false == false, true 또는 false == 참, 거짓 또는 참 == 참, 참 또는 참 == 참.여기

는 비트 단위 OR의 예 생성 된 비트 패턴이다 : VAR1 (11) | = VAR2 (14) -> VAR1 (15)

 
    1011 (11) 
OR 1110 (14) 
= 1111 (15) 
4

정수가되도록, 이진 표현 될 수

00000000 == 0 
00000001 == 1 
00000010 == 2 
00000011 == 3 
00000100 == 4 
00001000 == 8 
00010000 == 16 

비트 단위 OR 비트들의 두 세트 "병합"으로 두 숫자를 조합 : 각 디지트 (비트 스위치)가 1 (ON) 또는 0 (OFF) 인

First number:  00110000 
Second number: 00000010 
Result:   00110010 

입력 숫자 중 하나의 비트가 1이면 결과에서 1이됩니다. 비트가 입력 숫자 모두 1

First number:  00110100 
Second number: 10011110 
Result:   00010100 

경우가있을 것이다 한 결과에서 :

비트의 두 세트의 "중첩"발견 비트 AND와 비교.

숫자가 변수 a와 b에있는 경우, 새 변수 C에 비트 단위는 OR/AND 결과를 배치 할 수 있습니다 :

unsigned int c = a | b; // OR 

unsigned int c = a & b; // AND 

종종 결과는 두 변수 중 하나에 배치 할 필요를 , 속기로

unsigned int c = a | b; // OR 
c = a; // copy 

그래서 즉, 단일 단계에서이 작업을 수행 할 수 있습니다

a |= b; // merge b directly into a