Anfängerfrage zu "&&"



  • Hallo,

    ich bin erst ganz am Anfang meiner C Programmierung bzw am Anfang meiner Programmierkunst überhaupt. Nun hab ich ein Problem den UND Operator komplett zu verstehen und hoffe ihr könnt mir den erklären.

    in einer Anweisung wie etwa:

    if (a==b) && (c==d)

    ist mir klar, dass beide Rückgabewerte WAHR (1) sein müssen damit letztendlich wieder ein WAHR (1) ausgegeben wird.

    Aber wie verhält es sich wenn man zwei Zahlen mit dem UND Operator verbindet, wann bekomme ich hier als Ergebnis 1 und wann 0?

    Durch Ausprobieren bin ich zu dem Schluß gekommen, dass "&&" als Operant zweier Zahlen immer 1 ausgibt und nur dann eine 0 als Ergebniss ausgegeben wird wenn eine 0 beteiligt ist. Ich kann mir dieses Verhalten jedoch nicht ganz erklären, denn bei obgigen Beispiel (if (a==b)...) wird ja nur 1 ausgegeben wenn beide Vergleiche 1 ergeben und somit als Vergleich steht "1&&1". Wenn ich das nun aber ausprobiere erhalte ich "0" als Ergebnis.

    Wo liegt mein Denkfehler, oder hab da etwas von Grundauf nicht verstanden?

    Gruß
    noVuz



  • Ähhh...etwas wirr. Es wird nicht irgendetwas mit 0 ausgegeben wenn was abgefragt wird.

    int A=10;
    int B=20;
    
    int C=30;
    int D=40;
    
    if((A==B)&&(C==D)) //Ist A gleich B? (10=20?) und C gleich D (30=40?)...
    {
     cout<< A <<" entspricht: "<< B <<endl; //...dann gebe "A entspricht B" und
     cout<< C <<" entspricht: "<< D <<endl; //..."C entspricht D" aus.
    }
    else               //Andernfalls...
    {
     cout<< A <<" != "<< B <<endl; //Gib aus das A ungleich B und...
     cout<< C <<" != "<< D <<endl; //...C ungleich D ist.
    }
    

    Vielleicht erklärst du es nochmal richtig, zumindest ich blick da nicht durch.



  • Das ist eigentlich ganz einfach.
    Jede Zahl ungleich 0 liefert 1, 0 bleibt 0.
    Und 1&&1 ist natürlich 1.



  • noVuz schrieb:

    Durch Ausprobieren bin ich zu dem Schluß gekommen, dass "&&" als Operant zweier Zahlen immer 1 ausgibt und nur dann eine 0 als Ergebniss ausgegeben wird wenn eine 0 beteiligt ist.

    genau, denn in C gilt:
    Zahl gleich 0 ist äquivalent zu FALSCH (boolean FALSE)
    Zahl ungleich 0 ist äquivlent zu WAHR (boolean WAHR)

    if(33 && 77) ist äquivalent zu if(1 && 1)



  • achso, jede Zahl außer Null entspricht dem boolean TRUE. Das war die Info, die mir gefehlt hat. Dann ist es ja klar, dass 5%%6 auch TRUE ergibt, da TRUE und TRUE eben TRUE bleibt. Vielen Dank für die Info Supertux, das hat mich weitergebracht.

    @way, natürlich wird 0 ausgegeben wenn ein boolean FALSE ausgegeben werden soll. So wird hier etwa 0 augegeben

    int A=10;
    int B=20;
    int C=30;
    int D=30;
    
    printf ("(A==B)&&(C==D) ergibt als Ausgabewert: %d", (A==B)&&(C==D));
    

    @too, du hast natürlich recht ich hatte nur nicht verstanden warum jeder Wert außer 0 mir eine 1 liefert. Supertux hat das ja nun aufgeklärt.

    Vielen Dank für euere Antworten! Ich werd mir Mühe geben in Zukunft meine Fragen präziser zu formulieren.



  • noVuz schrieb:

    Aber wie verhält es sich wenn man zwei Zahlen mit dem UND Operator verbindet, wann bekomme ich hier als Ergebnis 1 und wann 0?

    so wie supertux schon erzählt hat, ist !0 -->true und 0 -->false.
    übrigens verbindest du keine zahlen, sondern du machst einen logischen vergleich. das ist ein kleiner unterschied.
    @way: lass doch diesen 'cout'-unsinn weg. das verwirrt nur und hilft hier keinem weiter.


Log in to reply