Ich habe den folgenden Code, und ich kann nicht verstehen, was es bedeutet:Was bedeutet Operation "| =" in C++?
var1 |= var2>0 ? 1 : 2;
Wer kann mir helfen, bitte!
Ich habe den folgenden Code, und ich kann nicht verstehen, was es bedeutet:Was bedeutet Operation "| =" in C++?
var1 |= var2>0 ? 1 : 2;
Wer kann mir helfen, bitte!
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
Es ist bitweise oder.
Alle a op= b
Operatoren sind eine Verknüpfung zu a = a op b
.
Da C++ jedoch op
und op=
separat außer Kraft setzen kann, müssen Sie darauf achten, dass jeder Implementierer von benutzerdefinierten Typen konsistent ist.
Ich würde halten böse jemand Durchführung verschiedene Aufgaben in '@' und '@ =': s –
@Matthieu: C++ (und, IMO, wird es immer sein) eine Sprache, die Ihnen viel Seil gibt, mit denen sie hängen. – Richard
Ich kenne niemanden, der sie implementiert, um ein anderes Verhalten zu haben (außer dass die zusammengesetzte Zuweisung offensichtlich ihren linken Operanden ändert). Aber das Implementieren eines ohne das andere ist ziemlich üblich, z. Iostreams Einfügeoperatoren. –
Operator | = bedeutet Zuordnung von Bit-Operator OR
Wie bereits gesagt wurde es für v1 = v1 | v2;
Eine andere Anwendung Sie across ist mit booleans kommen könnte kurz ist.
Gegeben:
b |= a;
cond ? x : y
kehrt x
wenn cond wahr ist und y
anders:
if(a)
b = true;
man sehen:
bool b = /*some value*/
Statt zu sagen. Lesen Ternary Operator
a |= b
ist eine Abkürzung für a = a | b
die a | b
zu a
a | b
ist bitwise OR von a
und b
zuweist. (z. B. 2 | 3 = 3 und 1 | 2 = 3)
2 | 3 = 3, oder? – Cowan
@Cowan: danke und aktualisiert. –
Wie andere Leute vor mir erwähnt haben, bedeutet dies, dass Sie mit Zuweisungen durch bitweises ODER enden.
Bitweises ODER kann dargestellt werden, indem das Bitmuster links und rechts genommen und übereinander gelegt wird.
In jeder Spalte: 0 + 0 gibt 0, 1 + 0 ergibt 1, 0 + 1 gibt 1, 1 + 1 1.
Im Zusammenhang mit booleans gibt: falsch ODER falsch == false, true oder false == Wahr, Falsch ODER Wahr == Wahr, Wahr ODER Wahr == Wahr.
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)
Ganze Zahlen 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
bitweise 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 ist in beiden der Eingabe von Zahlen, dann wird es 1 in der Folge sein.
Wenn die Zahlen in Variablen a und b sind, können Sie den Ort, die bitweise OR/AND Ergebnisse in eine neue Variable c:
unsigned int c = a | b; // OR
unsigned int c = a & b; // AND
Oft ist das Ergebnis in eine der beiden Variablen gesetzt werden muss ,
unsigned int c = a | b; // OR
c = a; // copy
so als Abkürzung dh, können Sie dies in einem einzigen Schritt tun:
a |= b; // merge b directly into a
in CS, es heißt ein „com Pfund Zuordnung ". –
Sie sollten über die Sprache nachlesen. – starblue
FYI, dies ist auch in Java gegeben, z. 'int var1, var2'. – polygenelubricants