Domanda

Ho il seguente codice e non riesco a capire che cosa vuol dire:

var1 |= var2>0 ? 1 : 2;

Qualcuno mi può aiutare per favore!

È stato utile?

Soluzione

if (var2 > 0)
  var1 = var1 | 1;
else 
  var1 = var1 | 2;

E 'bit per bit-o.

Altri suggerimenti

Tutti gli operatori a op= b sono una scorciatoia per a = a op b.

Tuttavia, poiché C ++ permette op e op= per essere sovrascritto a parte si basano su ogni realizzatore dei tipi personalizzati per essere coerenti.

La sua Assignment by bitwise OR

v1 |= v2;

è l'abbreviazione di:

v1 = v1 | v2;

ritorna cond ? x : y x if cond è vero e y altrimenti. Leggi ternario Operatore

a |= b è una scorciatoia per a = a | b che si assegna a a | b a

a | b è OR bit a bit di a e b. (Esempio 2 | 3 = 3 e 1 | 2 = 3)

Come altri hanno detto che è l'abbreviazione di v1 = v1 | v2; Un altro utilizzo si potrebbe incontrare è con booleani.
Dato:

bool b = /*some value*/

Invece di dire:

if(a)
  b = true;

si potrebbe vedere:

  b |= a;

Interi può essere rappresentato in binario, in modo che ogni cifra (bit, switch) è 1 (a) o 0 (spento):

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

OR bit combina due numeri di "fondere" i due insiemi di bit:

First number:     00110000
Second number:    00000010
Result:           00110010

Se un bit è 1 in uno dei numeri di ingresso, allora sarà 1 nel risultato.

Confronto con AND bit a bit, che trova la "sovrapposizione" dei due insiemi di bit:

First number:     00110100
Second number:    10011110
Result:           00010100

Se un bit è 1 in entrambi i numeri di ingresso, allora sarà 1 nel risultato.

Se i numeri sono variabili a e b, è possibile posizionare il il bit a bit e / o risultati in una variabile nuova c:

unsigned int c = a | b; // OR

unsigned int c = a & b; // AND

Spesso le esigenze di risultato per essere inseriti in una delle due variabili, cioè.

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

Così come abbreviazione, si può fare questo in un unico passaggio:

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

Come altri prima di me hanno già detto, significa che ci si ritroverà con le assegnazioni di OR bit per bit.

OR bit può essere illustrato prendendo di sinistra e destra bit-modelli e metterli in cima a vicenda.

In ogni colonna: 0 + 0 dà 0, 1 + 0 dà 1, 0 + 1 dà 1, 1 + 1 dà 1.
Nel contesto di booleani: false o false false ==, vere o false == true, falso o vero == true, vere o vere == true

.

Ecco un esempio di OR bit a bit e lo schema di bit risultante: var1 (11) | = var2 (14) -> var1 (15)

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

L'operatore | = mezzi di assegnazione da operatore OR

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top