C++: Unterschied zwischen & und &&?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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 

TechPech1984  23.02.2022, 15:06

wäre die frage was passiert wenn 1 bit OK ist und ein anderes bit nicht gesetzt ist.

0
Gehilfling  23.02.2022, 15:08
@TechPech1984
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.
}
0
TechPech1984  23.02.2022, 15:10
@Gehilfling

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 .

0

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.


GuteAntwort2021  23.02.2022, 15:02

Und bei einem einfachen schon?

0
GuteAntwort2021  23.02.2022, 15:05
@ZaoDaDong

Gerade mal ausprobiert. Tatsache! Bin immer davon ausgegangen, dass es keinen Unterschied macht.

Wieder was gelernt. Danke! :)

0
TechPech1984  23.02.2022, 15:09
@GuteAntwort2021

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 .

1
TechPech1984  23.02.2022, 15:03

ja , aber es sind zwei komplett unterschiedliche operationen .

1
HugeGameArtGD  23.02.2022, 15:05

Richtig, & und | sind dennoch Operatoren für Bits und Bytes

0

&& erzeugt ein boolean also das Standard UND

wärend ein & ein Bitweise Und verknüpfung ist, was dann entsprechend einen Wert ausgibt .