![]() |
C++ Frage (Interpretation einer Zeile)
Hallo,
was genau bedeutet denn folgende Zeile in C++? :gruebel:
Code:
pUrsacheDrehung[i] |= 1<<2;
|
Re: C++ Frage (Interpretation einer Zeile)
Also pUrsacheDrehung wird nen Pointer auf nen Array sein, wegen dem 'p'. pUrsacheDrehung[i] is demnach das Element Nummer 'i'. Den Operator '|=' kenn ich nich, kA was der macht ;) aba << und >> sind Bitshift-Operatoren, damit kann man Bits verschieben. Soweit ich mich recht erinnere is '|' nen binäres "Oder" aber kA was das in dem Zusammenhang bedeuten könnte.
cya :) |
Re: C++ Frage (Interpretation einer Zeile)
Habs mir selbst erarbeiten können und bin nun zu folgender Erklärung gekommen, die ich meinem Kumpel auch gleich mal gepostet hab':
Code:
Das sollte so stimmen, oder? :gruebel:
Die Variable pUrsacheDrehung[i] (wahrscheinlich ein Integer-Wert in einem Array) wird mit einem ODER verknüpft und das Resultat dieser logischen Verknüpfung wird um 2 Stellen nach links geschoben.
2 Stellen nach links verschieben bedeutet Multiplikation mit der Zahl 4! Die Operation bedeutet in einfachen Worten: pUrsacheDrehung[i] = (pUrsacheDrehung[i] | 1) * 4; // Kannst Deine Zeile durch diese Zeile ersetzen |
Re: C++ Frage (Interpretation einer Zeile)
Hallo!
IMHO wird das 1<<2 zuerst ausgefüht. Operatoren nach dem Muster op= haben eine sehr niedrige Prioirät und werden noch dazu von rechts nach links gelesen. MfG Peter |
Re: C++ Frage (Interpretation einer Zeile)
Hallo Peter Lustig,
das bedeutet also, dass man ...
Code:
... gar nicht so schreiben kann, sondern man muss den "|="-Operator
pUrsacheDrehung[i] |= 1<<2;
auflösen wegen der geringeren Priorität? :gruebel: Ok danke, ich werde diesen Tipp mal weiter reichen. :thuimb: |
Re: C++ Frage (Interpretation einer Zeile)
Zitat:
Klar kann man den so schreiben. Aber da steht nur nicht
Code:
sondern
pUrsacheDrehung[i] = (pUrsacheDrehung[i] | 1) * 4;
Code:
pUrsacheDrehung[i] = pUrsacheDrehung[i] | (1 * 4);
Was Peter da angesprochen hat betrifft alle Zuweisungsoperatoren in C, sie werden wie in der Mathematik von rechts nach links bearbeitet, man speichert also den Wert rechts vom Operand in die Variable links von ihm, und setzt nicht die Variable links vom Operand auf den Wert rechts von ihm. Daher ist folgendes auch möglich (geht in Pascal leider nicht...):
Code:
In diesem Fall hat die rechts-nach-links-Bearbeitung keinen Einfluss auf die Bearbeitung, weil die Operanden, wie Peter schon sagte, eine niedrige Priorität haben und wir rechts keine weiteren Zuweisungsoperanden haben.
var1 = var2 = var3 = var4 = 0 // setzt alle Variablen auf 0
|
Re: C++ Frage (Interpretation einer Zeile)
Richtig interessant wird es dabei bei folgenden Zeilen:
Code:
Hier haben a und c beide den Wert 0.
int a = 1, b = 2, c;
c = a = ++a - b;
Code:
Hier hat a wieder den Wert 0, c aber -1!
int a = 1, b = 2, c;
c = a = a++ - b; |
Re: C++ Frage (Interpretation einer Zeile)
Erstaunen tut mich eigentlich nur zweiteres :-?
Eigentlich würde ich sagen, daß a = -1 sein müsste und c = 0, nicht umgekehrt. Das erste ist ja logisch (ich weiß schon, daß Luckie mir da nicht zustimmen wird *g*). |
Re: C++ Frage (Interpretation einer Zeile)
Die Zeile wird so interpretiert:
Code:
Die erste Zeile von rechts nach links: a - b = -1, dadurch c = -1, a = -1. Danach wird a inkrementiert - a = 0!
c = a = a - b;
a++; |
Re: C++ Frage (Interpretation einer Zeile)
Argh, Denkfehler. Stimmt, ist ganz logisch %-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz