Frage zu dem NICHT Operanden



  • Ich bin gerade ein Buch am lesen um ein bisschen C++ zu lernen. Da ist aber leider ein Punkt der mir nicht ganz klar ist. Ich weiß das der NICHT Operand einen Wert in einer boolschen Variable negiert. Jetzt habe ich aber in einem Code folgendes gesehen.

    bool srand = false;
    
    if( !srand )
    {
        hier steht ein Code...
        srand = true;
    }
    

    In dem Argument wird der Wert von srand auf true gesetzt. Meine Frage ist jetzt liefert das Argument jetzt auch true?
    Eigentlich wird der Wert ja hier nur negiert aber in der Variable nicht verändert. Das würde doch heißen dass das Argument den Wert false liefert. Oder irre ich mich da?



  • Ja, du kannst aber auch das schreiben

    srand = !srand;
    


  • Bennisen schrieb:

    Ich bin gerade ein Buch am lesen um ein bisschen C++ zu lernen. Da ist aber leider ein Punkt der mir nicht ganz klar ist. Ich weiß das der NICHT Operand einen Wert in einer boolschen Variable negiert. Jetzt habe ich aber in einem Code folgendes gesehen.

    bool srand = false;
    
    if( !srand )
    {
        hier steht ein Code...
        srand = true;
    }
    

    In dem Argument wird der Wert von srand auf true gesetzt. Meine Frage ist jetzt liefert das Argument jetzt auch true?
    Eigentlich wird der Wert ja hier nur negiert aber in der Variable nicht verändert. Das würde doch heißen dass das Argument den Wert false liefert. Oder irre ich mich da?

    Zu dem Zeitpunkt wo srand auf true gesetzt wird, wurde die if-Bedingung schon lange ausgewertet. Sie wird also nicht "nachträglich" auf false ausgewertet, falls du das meintest. Wenn du allerdings danach nochmal !srand auswerten würdest, käme false heraus.



  • Find die Bedingung nur etwas seltsam, da bei mir bisher im Ausdruck immer Operanden vorkammen.
    Mein Problem war festzustellen wann der Ausdruck false oder true zurückliefert. Da die Bedingung ja normal geprüft werden muss und das immer mit einem Operanden.

    In meinen Augen hatte die IF-Bedingung zuerst keinen Sinn.



  • Ich glaub ich habs jetzt.

    Wenn speziell dieser Ausdruck !srand den Wert true liefert, dann ist die Bedingung auch true. So hab ich das jetzt verstanden.


  • Administrator

    Am einfachsten ist es, wenn du dir die Operatoren als Funktionen vorstellst, was sie auch sind. Also vereinfacht dargestellt:

    bool negate(bool value)
    {
      return (value ? false : true);
    }
    
    // ...
    
    if(negate(srand))
    {
      // ...
    }
    
    // Oder wie es der Kompiler sieht:
    if(operator!(srand))
    {
     // ...
    }
    

    Grüssli


Anmelden zum Antworten