Bool'scher Returnwert



  • Bin mir nicht sicher, wie ich einen Wahrheitswert richtig zurückgebe:

    // Version A
    
    int bit_is_set(uint64 a) 
    {
      return a & MASK;
    }
    
    // Version B
    
    int bit_is_set(uint64 a) 
    {
      return (a & MASK) != 0;
    }
    

    Auf bool verzichte ich besser, aber das Problem ist dasselbe. In Version A wird dann implizit von uint64 nach int konvertiert. In Version B tatsächlich 1 oder 0 zurückgegeben.

    Gruss
    T.



  • Tomahawk schrieb:

    Auf bool verzichte ich besser,

    warum?



  • Tomahawk schrieb:

    Bin mir nicht sicher, wie ich einen Wahrheitswert richtig zurückgebe:

    bool bit_is_set(uint64 a) 
    {
      return a & MASK;
    }
    

    Tomahawk schrieb:

    Auf bool verzichte ich besser, aber das Problem ist dasselbe.

    Nein. Wenn der Wert von MASK nicht "in ein int passt" hast Du bei Deiner Version A entweder undefiniertes oder zumindest ein Implementierungs-definiertes Verhalten. Ein uint64 ist hingegen problemlos zu bool konvertierbar. Dabei wird alles außer der 0 auf true abgebildet. Die 0 auf false.

    Tomahawk schrieb:

    In Version A wird dann implizit von uint64 nach int konvertiert. In Version B tatsächlich 1 oder 0 zurückgegeben.

    Ja und?

    static_cast<bool>(a & MASK);
    

    ist so ziemlich dasselbe wie

    (a & MASK)!=0
    

    .

    Wenn Du danach wieder einen int draus machst, ist das Dein Bier. bool->int bildet false auf 0 ab und true auf 1.

    kk


Anmelden zum Antworten