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!

Foi útil?

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.

É o Assignment by bitwise OR

v1 |= v2;

é curto para:

v1 = v1 | v2;

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top