O que significa "|=" operação dizer em C++?
-
27-09-2019 - |
Pergunta
Eu tenho o seguinte código e eu não consigo entender o que isso significa:
var1 |= var2>0 ? 1 : 2;
Alguém pode me ajudar por favor!
Solução
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
É bit-mutualmente ou.
Outras dicas
Todos a op= b
Os operadores são um atalho para a = a op b
.
No entanto, já que o C ++ permite op
e op=
Para ser substituído separadamente, você confia em cada implementador de tipos personalizados para ser consistente.
cond ? x : y
retorna x
Se cond for verdadeiro e y
por outro lado. Ler Operador ternário
a |= b
é abreviado para a = a | b
que está atribuindo a | b
para a
a | b
é Bit nejudado ou do a
e b
. (por exemplo, 2 | 3 = 3 e 1 | 2 = 3)
Como outros disseram, é curto para v1 = v1 | v2;
Outro uso que você pode encontrar é com os booleanos.
Dado:
bool b = /*some value*/
Ao invés de dizer:
if(a)
b = true;
você pode ver:
b |= a;
Números inteiros podem ser representados em binário, de modo que cada dígito (de bits, interruptor) é 1 (activado) ou 0 (off):
00000000 == 0
00000001 == 1
00000010 == 2
00000011 == 3
00000100 == 4
00001000 == 8
00010000 == 16
Bit a bit OU combina dois números por "juntar" os dois conjuntos de bits:
First number: 00110000
Second number: 00000010
Result: 00110010
Se o bit é 1 em da entrada de números, então ele vai ser 1 no resultado.
Compare com bit a bit E, a qual encontra-se a "sobreposição" de dois conjuntos de bits:
First number: 00110100
Second number: 10011110
Result: 00010100
Se o bit for 1, TANTO da entrada de números, então ele vai ser 1 no resultado.
Se os números são variáveis a e b, você pode colocar o bit-a-bit E/OU resultados em uma nova variável c:
unsigned int c = a | b; // OR
unsigned int c = a & b; // AND
Muitas vezes, o resultado precisa ser colocado em uma das duas variáveis, i.e.
unsigned int c = a | b; // OR
c = a; // copy
Assim como um atalho, você pode fazer isso em uma única etapa:
a |= b; // merge b directly into a
Como outras pessoas antes de mim mencionaram, isso significa que você acabará com atribuições bit -netward ou.
Bitwise ou pode ser ilustrado pegando os padrões laterais à esquerda e à direita e os coloque em cima um do outro.
Em cada coluna: 0 + 0 fornece 0, 1 + 0 fornece 1, 0 + 1 fornece 1, 1 + 1 fornece 1.
No contexto dos booleanos: false ou false == Falso, verdadeiro ou falso == Verdadeiro, Falso ou True == Verdadeiro, Verdadeiro ou True == Verdadeiro.
Aqui está um exemplo de bitwise ou e o padrão de bit resultante: var1 (11) | = var2 (14) -> var1 (15)
1011 (11) OR 1110 (14) = 1111 (15)
O operador | = significa atribuição por bit netwise ou operador