Frage

Ich habe den folgenden Code, und ich kann nicht verstehen, was es bedeutet:

var1 |= var2>0 ? 1 : 2;

Jeder kann mir bitte helfen!

War es hilfreich?

Lösung

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

Es ist bitweise oder.

Andere Tipps

Alle a op= b Operatoren sind eine Verknüpfung zu a = a op b.

Da jedoch C ++ ermöglicht op und op= wird außer Kraft gesetzt getrennt setzen Sie auf jeden Implementierer von benutzerdefinierten Typen in Einklang sein.

Es ist die Assignment by bitwise OR

v1 |= v2;

ist die Abkürzung für:

v1 = v1 | v2;

cond ? x : y kehrt x wenn cond wahr und y anders ist. Lesen Sie Ternary Operator

a |= b ist eine Abkürzung für a = a | b die a | b zu a

zuweist

a | b ist bitweise OR von a und b. (Z 2 | 3 = 3 und 1 | 2 = 3)

Wie schon andere gesagt haben, es ist die Abkürzung für v1 = v1 | v2; Eine andere Anwendung Sie kommen könnte across ist mit booleans.
Gegeben:

bool b = /*some value*/

Statt zu sagen:

if(a)
  b = true;

Sie können sehen:

  b |= a;

Integers können binär dargestellt werden, so dass jede Stelle (Bit-Schalter) ist 1 (EIN) oder 0 (aus):

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

bitweisen OR kombiniert zwei Zahlen, die durch die beiden Sätze von Bits "merging":

First number:     00110000
Second number:    00000010
Result:           00110010

Wenn ein Bit 1 in einer der beiden Eingangszahlen ist, dann wird es 1 in der Folge sein.

Vergleichen mit bitweise AND, die die „Überlappung“ der beiden Sätze von Bits findet:

First number:     00110100
Second number:    10011110
Result:           00010100

Wenn ein Bit 1 in beide der Eingangszahlen ist, dann wird es 1 in der Folge sein.

Wenn die Zahlen in Variablen a und b sind, können Sie legen Sie die die bitweise OR / AND Ergebnisse in eine neue Variable c:

unsigned int c = a | b; // OR

unsigned int c = a & b; // AND

Oft sind die Folge Bedürfnisse in einer der beiden Variablen gesetzt werden, d.

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

So als Abkürzung, Sie können dies tun, in einem einzigen Schritt:

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

Wie andere Leute vor mir erwähnt haben, es bedeutet, dass Sie mit Zuweisungen von bitweise am Ende dann OR.

bit- oder können, indem sie auf der linken und rechten Seite Bit-Muster und legte sie oben auf einander dargestellt werden.

In jeder Spalte: 0 + 0 gibt 0, 1 + 0 ergibt 1, 0 + 1 1 gibt, 1 + 1 gibt 1
Im Zusammenhang mit booleans: false ODER falsch == false, true oder false == wahr, falsch oder wahr == true, wahr oder wahr == true

.

Hier ist ein Beispiel für bitweise OR und das resultierende Bitmuster: var1 (11) | = var2 (14) -> var1 (15)

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

Der Operator | = Mittel Zuordnung von bitweisen OR-Operator

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top