AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C++ Frage (Interpretation einer Zeile)
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Frage (Interpretation einer Zeile)

Ein Thema von Dannyboy · begonnen am 5. Apr 2004 · letzter Beitrag vom 5. Apr 2004
Antwort Antwort
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#1

C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 12:36
Hallo,
was genau bedeutet denn folgende Zeile in C++?
Code:
pUrsacheDrehung[i] |= 1<<2;
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
MagiC_Creator

Registriert seit: 4. Apr 2004
Ort: Oberpfalz ;)
4 Beiträge
 
Delphi 7 Personal
 
#2

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 12:46
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
dumm di dumm ^^
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#3

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 13:00
Habs mir selbst erarbeiten können und bin nun zu folgender Erklärung gekommen, die ich meinem Kumpel auch gleich mal gepostet hab':

Code:
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
Das sollte so stimmen, oder?
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#4

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 13:09
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
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#5

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 13:22
Hallo Peter Lustig,
das bedeutet also, dass man ...
Code:
pUrsacheDrehung[i] |= 1<<2;
... gar nicht so schreiben kann, sondern man muss den "|="-Operator
auflösen wegen der geringeren Priorität?
Ok danke, ich werde diesen Tipp mal weiter reichen.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#6

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 13:36
Zitat von Dannyboy:
das bedeutet also, dass man ...
Code:
pUrsacheDrehung[i] |= 1<<2;
... gar nicht so schreiben kann, sondern man muss den "|="-Operator
auflösen wegen der geringeren Priorität?
Wieso?
Klar kann man den so schreiben.
Aber da steht nur nicht
Code:
pUrsacheDrehung[i] = (pUrsacheDrehung[i] | 1) * 4;
sondern
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:
var1 = var2 = var3 = var4 = 0 // setzt alle Variablen auf 0
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.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 16:57
Richtig interessant wird es dabei bei folgenden Zeilen:

Code:
int a = 1, b = 2, c;
c = a = ++a - b;
Hier haben a und c beide den Wert 0.

Code:
int a = 1, b = 2, c;
c = a = a++ - b;
Hier hat a wieder den Wert 0, c aber -1!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#8

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 19:33
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*).
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 19:43
Die Zeile wird so interpretiert:

Code:
c = a = a - b;
a++;
Die erste Zeile von rechts nach links: a - b = -1, dadurch c = -1, a = -1. Danach wird a inkrementiert - a = 0!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#10

Re: C++ Frage (Interpretation einer Zeile)

  Alt 5. Apr 2004, 20:11
Argh, Denkfehler. Stimmt, ist ganz logisch %-)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz