Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

lumpinus

Frischling

  • »lumpinus« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Bad Münstereifel

  • Private Nachricht senden

1

04.10.2006, 20:21

Unterschied zwischen & und && ?

Nach meinem Verständnis läuft das so:
-& verknüft alle Bits zweier Ausdrücke logisch miteinander und gibt das Ergebnis zurück
-&& macht doch genau das selbe, oder?

Was ist nun besser? :?

Anonymous

unregistriert

2

04.10.2006, 20:22

Das eine ist eine bitweise Verknüpfung, das andere eine Logische.

http://cppreference.com/operator_precedence.html

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

04.10.2006, 20:25

& ist ein Bitoperation (AND) wie du schon richtig sagtest... && wird aber zum verknüpfen von Bedingungen verwendet... zB in einer if-Bedingung:

C-/C++-Quelltext

1
if(Bedingung1 && Bedingung2) Funktion();


Damit Funktion() aufgerufen wird, MÜSSEN BEIDE Bedingungen wahr sein... Natürlich gibt es dann auch noch ein Gegenstück... und zwar das ODER ||

C-/C++-Quelltext

1
if(Bedingung1 || Bedingung2) Funktion();

Hier wird Funktion aufgerufen falls eine der beiden Bedingungen zutrifft...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

lumpinus

Frischling

  • »lumpinus« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Bad Münstereifel

  • Private Nachricht senden

4

04.10.2006, 20:33

gibt es denn überhaupt einen Unterschied zwischen einer Bedingung und einer Variablen?
Ich meine, ist es nicht so dass eine Variable wahr ist, wenn sie größer als null ist? Nur wie wäre das dann bei floats, die ja nicht 100%ig genau sind?

Ich frage mich z.B. jedes Mal ob ich & oder && nehmen soll, wenn es darum geht zu prüfen, ob ein bestimmtes Flag gesetzt ist:

C-/C++-Quelltext

1
if(Variable & Flag) Funktion();

ist doch dasselbe wie

C-/C++-Quelltext

1
if(Variable && Flag) Funktion();

Anonymous

unregistriert

5

04.10.2006, 20:39

lumpinus
Beim ersten prüfst Du ob in Variable Flag enthalten ist. Im 2. sagst Du nur aus das beide Werte != 0 sein müssen.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

04.10.2006, 23:21

Zitat von »"lumpinus"«


C-/C++-Quelltext

1
if(Variable & Flag) Funktion();

ist doch dasselbe wie

C-/C++-Quelltext

1
if(Variable && Flag) Funktion();


Sei Variable false und Flag true.

if (Variable & Flag) Funktion();
Der Compiler stellt fest: Variable ist 0, Flag ist 1, 0 & 1 = 0

if (Variable && Flag) Funktion();
Der Compiler stellt fest: Variable ist 0, also ist das Ergebnis der and Verknüpfung in jedem Fall false, bzw 0. Die Untersuchung von Flag findet gar nicht statt.

Das ist zB hier wichtig:

if (!!Objekt & Objekt->IrgendeinBoolWert) Funktion();
Löst eine Zugriffsverletzung aus für Objekt = 0

if (!!Objekt && Objekt->IrgendeinBoolWert) Funktion();
Löst keine Zugriffsverletzung aus wenn Objekt = 0, da Objekt->IrgendeinBoolWert nicht mehr untersucht wird.

Ich hoffe das war verständlich soweit.

Edit: Ich hab mal gerade Patricks Beitrag gelesen und da das was er sagt im Widerspruch steht zu dem was ich sage und ich dauernd alles durcheinander haue könnte es sein das ich falsch liege. So wie ich es beschrieben habe ist es jedenfalls in Java.

lumpinus

Frischling

  • »lumpinus« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Bad Münstereifel

  • Private Nachricht senden

7

05.10.2006, 00:13

Jetzt ist alles klar! :p

Ich bin fälschlicherweise immer davon ausgegangen dass && auch irgendwie die zwei Argumente verknünft.

Danke, Leute!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

05.10.2006, 08:34

Zitat von »"lumpinus"«

Ich bin fälschlicherweise immer davon ausgegangen dass && auch irgendwie die zwei Argumente verknünft.

Das tut es doch. Es ist eine logische Und-Verknüpfung mit Lazy Evaluation, d.h. wenn das erste Argument schon false ergibt, wird das zweite nicht mehr ausgewertet (und bei ||: wenn das erste schon true ist).

int & int -> int
int && int -> bool

tnecniv

Treue Seele

Beiträge: 164

Wohnort: BERLIN

  • Private Nachricht senden

9

06.10.2006, 15:14

@david
ich dacht immer || wäre exklusiv (wenn man das so schreibt...?)
Sagt der igel zu dem dachs:
willst du größer sein, dann wachs!
- alte Fritz weisheit

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

06.10.2006, 15:33

Was meinst du mit exklusiv?
Exklusives Oder ist es jedenfalls nicht, das wäre XOR, und das ergibt nur dann true, wenn genau eines beiden Argumente true ist.

Werbeanzeige