C++: Unterschied zwischen & und &&?
Hallo liebe Gutefrage.net Community
Ich habe soeben ein Programm als Übung geschrieben und mir ist dann aufgefallen, dass der Compiler sowohl "&" als auch "&&" akzeptiert. Zweiteres mit dem Oder-Zeichen habe ich jetzt nicht ausprobiert, aber ich gehe stark davon aus, dass es auch funktionieren würde.
Nun wollte ich euch fragen, worin dort genau der Unterschied ist.
ich bedanke mich im Voraus für eure Antworten.
Mit freundlichen Grüßen
UserDieRobbe
4 Antworten
Es handelt sich um den Unterschied von bitweisen ("&") und logischen ("&&") Operatoren.
Beispiel:
int a = 0b0001;
int b = 0b0100;
int c = 0b0001;
if(a && b)
{
//If wird ausgeführt, da a und b jeweils ungleich 0 sind
}
if(a & b)
{
//If wird nicht ausgeführt, da die Bits bei a und b nicht übereinstimmen
if(a & c)
{
//If wird ausgeführt, da das Bit bei a und c an der selben Stelle gesetzt ist.
}
Das einfache "&" bzw. generell bitweise-Operatoren wird auch häufig zum Setzen einzelner Bits genutzt:
int d = a | b; //d = 0b0101
int e = a & b; //e = 0b0000
int a = 0b0001;
int b = 0b0011;
int c = a & b; //c = 0b0001
int d = a | b; //d = 0b0011;
Gleiche Bits bleiben bestehen, ungleiche fallen raus.
Der folgende Fall geht auch:
int a = 0b0001;
int b = 0b1001;
if(a & b)
{
//If wird erreicht, da ein Bit übereinstimmt.
}
ich weiss, aber eigentlich wird getestet auf einen Wert
a & b == c um zu gucken welches bit gesetzt wurde bei gleicher maske .
den a & b ergibt einen wert und kein boolean .
https://stackoverflow.com/questions/34492501/difference-between-and-or-and
& bzw. | sollte für Bit-Vergleiche verwendet werden
Kann das nicht 100% sicher beantworten, aber unter Java würde ein doppeltes '&' dafür sorgen, dass die nachstehende Bedingung nichtmehr geprüft wird, wenn die vorstehende bereits nicht zutrifft.
Gerade mal ausprobiert. Tatsache! Bin immer davon ausgegangen, dass es keinen Unterschied macht.
Wieder was gelernt. Danke! :)
du musst aber verstehen warum das so ist, da && ein booleant wert erzeugt und wenn etwas FALSE ist brauch auch nicht mehr getestet werden ob der Rest FALSE ist. Bei & entstehen aber Werte . deswegen verlgeicht man die eigentlich mit einem anderen Wert also a & b == c , so weiss man z.b. welches BIT gesetzt wurde bei gleicher Maske b .
&& erzeugt ein boolean also das Standard UND
wärend ein & ein Bitweise Und verknüpfung ist, was dann entsprechend einen Wert ausgibt .
wäre die frage was passiert wenn 1 bit OK ist und ein anderes bit nicht gesetzt ist.