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