Tengo el siguiente código y no puedo entender lo que quiere decir:¿Qué significa la operación "| =" en C++?
var1 |= var2>0 ? 1 : 2;
Alguien me puede ayudar por favor!
Tengo el siguiente código y no puedo entender lo que quiere decir:¿Qué significa la operación "| =" en C++?
var1 |= var2>0 ? 1 : 2;
Alguien me puede ayudar por favor!
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
Es bit a bit-o.
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.
Consideraría malvado a cualquiera que realice una tarea diferente en '@' y '@ =': s –
@Matthieu: C++ es (y, IMO, siempre lo será) un lenguaje que le ofrece una gran cantidad de sogas para colgarse. – Richard
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. –
El operador | = significa Asignación por operador binario OR
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;
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 | b
a
a | b
es bitwise OR de a
y b
. (Por ejemplo, 2 | 3 = 3 y 1 | 2 = 3)
2 | 3 = 3, ¿verdad? – Cowan
@Cowan: gracias y actualizado. –
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)
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
en CS, que se llama un "com asignación de libras ". –
Debe leer en el idioma. – starblue
FYI, esto también se puede hacer en Java, por ejemplo, 'int var1, var2'. – polygenelubricants