Que signifie « | = » moyenne de fonctionnement en C ++?
-
27-09-2019 - |
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!
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.
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