2012-04-15 7 views
7

Ho questo codice C++ in uno dei miei libri di programmazione:Che cosa significa il tubo verticale (|) in C++?

WNDCLASSEX wndClass = { 0 }; 
wndClass.cbSize = sizeof(WNDCLASSEX); 
wndClass.style = CS_HREDRAW | CS_VREDRAW; 

Che cosa fa l'unico tubo fare in C++ di programmazione di Windows?

+4

Questo non ha nulla a che fare con la programmazione di Windows; questo è un operatore di base di C++. –

+0

Oh freddo. L'ho incontrato nel contesto della programmazione Windows durante la definizione di WNDCLASSEX. Ho modificato la mia domanda per includere quelle righe. – quakkels

+1

In realtà è un operatore di C, C++ lo adotta – EdChum

risposta

21

Operatore bit a bit OR. Imposta tutti i bit true che sono veri in entrambi i valori forniti.

Ad esempio CS_HREDRAW potrebbe essere 1 e CS_VREDRAW potrebbe essere 2. Quindi è molto semplice per controllare se sono impostati utilizzando il bit operatore AND &:

#define CS_HREDRAW 1 
#define CS_VREDRAW 2 
#define CS_ANOTHERSTYLE 4 

unsigned int style = CS_HREDRAW | CS_VREDRAW; 
if(style & CS_HREDRAW){ 
    /* CS_HREDRAW set */ 
} 

if(style & CS_VREDRAW){ 
    /* CS_VREDRAW set */ 
} 

if(style & CS_ANOTHERSTYLE){ 
    /* CS_ANOTHERSTYLE set */ 
} 

Vedi anche:

+0

whaa ..? tutti i bit per vero? quindi fammi pensare. 010101 | 101010 restituirebbe 111111? – quakkels

+0

Sto ancora imparando le cose orientate al bit oltre il booleano. – quakkels

+2

Sì. 'b00010101 | b00101010' restituirà 'b00111111'. – Zeta

4

È un operatore OR bit a bit. Ad esempio,

if(1 | 2 == 3) { 
    std::cout << "Woohoo!" << std::endl; 
} 

stampa Woohoo!.