2010-04-17 13 views

Respuesta

12

Todos los operadores a op= b son un acceso directo a a = a op b.

Sin embargo, dado que C++ permite que op y op= se anulen por separado, usted confía en que cada implementador de tipos personalizados sea coherente.

+1

Consideraría malvado a cualquiera que realice una tarea diferente en '@' y '@ =': s –

+1

@Matthieu: C++ es (y, IMO, siempre lo será) un lenguaje que le ofrece una gran cantidad de sogas para colgarse. – Richard

+0

No conozco a nadie que los implemente tenga un comportamiento diferente (excepto que la asignación compuesta obviamente cambia su operando de la izquierda). Pero implementar uno sin el otro es bastante común, p. operadores de inserción iostreams. –

2

El operador | = significa Asignación por operador binario OR

4

Como otros han dicho que es la abreviatura de v1 = v1 | v2; Otro uso se puedan encontrar, es con booleanos.
dado:

bool b = /*some value*/ 

En lugar de decir:

if(a) 
    b = true; 

podría ver:

b |= a; 
6

cond ? x : y vuelve x si cond es verdadera y y lo contrario. Leer Ternary Operator

a |= b es la abreviatura de a = a | b que se asigna a a | ba

a | b es bitwise OR de a y b. (Por ejemplo, 2 | 3 = 3 y 1 | 2 = 3)

+0

2 | 3 = 3, ¿verdad? – Cowan

+0

@Cowan: gracias y actualizado. –

3

Como han mencionado otras personas antes que yo, significa que terminará con asignaciones por bits OR.

La OR de bit a bit se puede ilustrar tomando los patrones de bits del lado izquierdo y el del lado derecho y colocándolos uno sobre el otro.

En cada columna: 0 + 0 da 0, 1 + 0 da 1, 0 + 1 da 1, 1 + 1 da 1.
En el contexto de booleanos: falsa o falsa == false, verdadero o falso == verdadero, falso O verdadero == verdadero, verdadero O verdadero == verdadero.

Aquí está un ejemplo de OR bit a bit y el patrón de bits resultante: var1 (11) | = var2 (14) -> var1 (15)

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

Los enteros pueden ser representados en binario, de modo que cada dígito (bit, interruptor) es 1 (on) o 0 (off):

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

OR bit a bit combina dos números por "fusión", los dos conjuntos de bits:

First number:  00110000 
Second number: 00000010 
Result:   00110010 

Si un bit es 1 en CUALQUIERA de los números ingresados, entonces será 1 en el resultado.

Comparar con AND bit a bit, que encuentra el "solapamiento" de los dos conjuntos de bits:

First number:  00110100 
Second number: 10011110 
Result:   00010100 

Si un bit es 1 en ambos de los números de entrada, entonces será 1 en el resultado.

Si los números están en las variables a y b, se puede colocar la combinación con el operador y/o resultados en una nueva variable c:

unsigned int c = a | b; // OR 

unsigned int c = a & b; // AND 

A menudo, el resultado tiene que ser colocado en una de las dos variables , es decir,

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

Así como una abreviatura, se puede hacer esto en un solo paso:

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