2012-04-15 14 views
7

tengo este código C++ en uno de mis libros de programación:¿Qué significa la tubería vertical (|) en C++?

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

¿Qué hace el único tubo de programación C++ ventanas?

+4

Esto no tiene nada que ver con la programación de Windows; este es un operador básico de C++. –

+0

Oh genial. Lo encontré en el contexto de la programación de Windows al definir WNDCLASSEX. Edité mi pregunta para incluir esas líneas. – quakkels

+1

En realidad, es un operador de C, C++ lo adopta – EdChum

Respuesta

21

Operador O bit a bit. Establecerá todos los bits verdaderos que sean verdaderos en cualquiera de los dos valores provistos.

Por ejemplo CS_HREDRAW podría ser 1 y CS_VREDRAW podría ser 2. Entonces es muy simple para comprobar si se establecen mediante el operador 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 */ 
} 

Ver también:

+0

whaa ..? todos los bits a la verdad? así que déjame pensar. 010101 | 101010 devolvería 111111? – quakkels

+0

Todavía estoy aprendiendo cosas sobre bits más allá de boolean. – quakkels

+2

Sí. 'b00010101 | b00101010' devolverá 'b00111111'. – Zeta

4

Es un operador O bit a bit. Por ejemplo,

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

imprimirá Woohoo!.