Ich mag "set" / "clear", aber achte auf Mehrdeutigkeiten in deiner Formulierung. Wie Filip betont, könnte "set the bool variable" bedeuten, dass ein bestimmter Wert in die Variable geschrieben wird. Aber "Setzen der Flagge" ist klarer.
Verwandte Terminologie: Das Umwandeln einer Ganzzahl von 0 / ungleich Null in einen Wert von 0/1 wird als "Booleanisierung" bezeichnet .
Wenn Sie den 0/1-Wert tatsächlich als Ganzzahl (statt als wahr / falsch bool
) verwenden, möchten Sie möglicherweise dieses Wort verwenden. Andernfalls wird es wahrscheinlich nur angezeigt, wenn Sie über die Kosten der Operationen sprechen, die der Compiler ausführen muss. (Oder wenn Sie manuell mit einer SIMD-Karte vektorisieren, vergleichen Sie, um in jedem Vektorelement alle Nullen / Einsen-Bits zu erzeugen.)
In C und C ++ bool
kann a implizit als 0 oder 1 zurück in eine Ganzzahl konvertiert werden und wird bei normalen Implementierungen bool
als Ein-Byte-Wert gespeichert, der entweder 0 oder 1 ist (nicht irgendein Wert ungleich Null). Das ermöglicht effiziente a && b
, aber in der Praxis haben viele C-Compiler Optimierungen verpasst .
bool booleanize(int a) { return a; } // C++
Diese Funktion kompiliert ret
auf den meisten Architekturen mehrere Anweisungen (ohne die ). (MIPS sind eine interessante Ausnahme, da sie Anweisungen zum Vergleichen in das Register anstelle eines separaten Flag- / Bedingungscoderegisters enthalten). Im Godbolt-Compiler-Explorer für x86-64, MIPS und ARM sehen wir, dass die x86-64-Version wie folgt lautet:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Tut mir leid, dieses Beispiel dafür, was Boolesches ein wenig groß / falsch ist!