Lubię „set” / „clear”, ale bądź ostrożny z dwuznacznością w swoim frazowaniu. Jak zauważył Filip , „ustaw zmienną bool” może oznaczać zapisanie pewnej wartości do zmiennej. Ale „ustawianie flagi” jest bardziej jasne.
Terminologia pokrewna: przekształcenie liczby całkowitej 0 / niezerowej w wartość 0/1 nazywa się „booleanizing” .
Jeśli faktycznie używasz wartości 0/1 jako liczby całkowitej (zamiast true / false bool
), możesz chcieć użyć tego słowa. W przeciwnym razie prawdopodobnie pojawi się tylko wtedy, gdy mówisz o koszcie operacji, które musi wykonać kompilator. (Lub jeśli ręcznie wektoryzujesz za pomocą porównania SIMD w celu uzyskania bitów zero-zero / all-one w każdym elemencie wektorowym).
W C i C ++ a bool
może domyślnie przekonwertować z powrotem na liczbę całkowitą jako 0 lub 1, a na normalnych implementacjach bool
jest przechowywana jako wartość jednobajtowa, która jest równa 0 lub 1 (nie tylko dowolna wartość niezerowa). Pozwala to na wydajne a && b
, ale w praktyce wiele kompilatorów C nie przeszło optymalizacji .
bool booleanize(int a) { return a; } // C++
Ta funkcja kompiluje się z wieloma instrukcjami (bez instrukcji ret
) w większości architektur. (MIPS jest interesującym wyjątkiem, posiadającym instrukcje porównania do rejestru zamiast oddzielnego rejestru znacznik / kod stanu). w eksploratorze kompilatorów Godbolt dla x86-64, MIPS i ARM thumb możemy zobaczyć, że wersja x86-64 to:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Przepraszam, ten przykład tego, co booleanizacja ma trochę duży / nie na temat!