Question

Je le code suivant et je ne comprends pas ce que cela veut dire:

var1 |= var2>0 ? 1 : 2;

Tout le monde peut me aider s'il vous plaît!

Était-ce utile?

La solution

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

ou de bitwise.

Autres conseils

Tous les opérateurs de a op= b sont un raccourci vers a = a op b.

Cependant, comme C ++ permet op et op= être surchargée séparément vous comptez sur chaque implémenteur de types personnalisés pour être compatibles.

Son Assignment by bitwise OR

v1 |= v2;

est l'abréviation de:

v1 = v1 | v2;

retourne cond ? x : y x si est vrai et cond y autrement. Lire ternaires opérateur

a |= b est un raccourci pour a = a | b qui assigne a | b à a

a | b est href="http://en.wikipedia.org/wiki/Bitwise_operation#OR" rel="nofollow noreferrer"> OU de bitwise a et b. (Par exemple 2 | 3 = 3 et 1 | 2 = 3)

Comme d'autres l'ont dit qu'il est court pour v1 = v1 | v2; Une autre utilisation que vous pourriez rencontrer est avec booléens.
Compte tenu:

bool b = /*some value*/

Au lieu de dire:

if(a)
  b = true;

vous pouvez voir:

  b |= a;

Entiers peut être représenté en binaire, de telle sorte que chaque chiffre (bit, commutateur) est 1 (activé) ou 0 (off):

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

Bitwise OU combine deux numéros de « fusion », les deux ensembles de bits:

First number:     00110000
Second number:    00000010
Result:           00110010

Si un bit est 1 dans un des numéros d'entrée, alors il sera 1 dans le résultat.

Comparer avec au niveau du bit, qui trouve le « chevauchement » des deux ensembles de bits:

First number:     00110100
Second number:    10011110
Result:           00010100

Si un bit est 1 dans les deux numéros d'entrée, alors il sera 1 dans le résultat.

Si les chiffres sont dans les variables a et b, vous pouvez placer le OU binaire / et les résultats dans une nouvelle variable c:

unsigned int c = a | b; // OR

unsigned int c = a & b; // AND

Souvent, les besoins de résultat pour être placé dans l'une des deux variables, i.e..

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

comme raccourci, vous pouvez le faire en une seule étape:

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

Comme d'autres avant moi ont dit, cela signifie que vous allez finir avec les affectations par opérateur OR.

Bitwise OU peut être illustré en prenant les motifs binaires à la main gauche et de droite et de les mettre sur le dessus de eachother.

Dans chaque colonne: 0 + 0 donne 0, 1 + 0 donne 1, 0 + 1 donne 1, 1 + 1 donne 1.
Dans le contexte de booléens: faux ou faux == faux, vrai ou faux == vrai, faux ou vrai == vrai, vrai ou vrai == true

.

Voici un exemple de OR et la bitwise configuration binaire résultant: var1 (11) | = var2 (14) -> var1 (15)

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

L'opérateur | = moyen d'affectation par l'opérateur OR

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top