J'aime "set" / "clear", mais attention à l'ambiguïté dans votre phrasé. Comme le souligne Filip , «définir la variable booléenne» pourrait signifier écrire une valeur dans la variable. Mais "mettre le drapeau" est plus clair.
Terminologie associée: transformer un entier 0 / non nul en une valeur 0/1 est appelé "booleanizing" .
Si vous utilisez réellement la valeur 0/1 comme entier (au lieu de comme vrai / faux bool
), vous voudrez peut-être utiliser ce mot. Sinon, cela n'apparaîtra probablement que si vous parlez du coût des opérations que le compilateur doit effectuer. (Ou si vous vectorisez manuellement avec un SIMD, comparez pour produire des bits à zéro / tout-en-un dans chaque élément vectoriel).
En C et C ++, a bool
peut implicitement se reconvertir en entier sous la forme 0 ou 1, et sur les implémentations normales bool
est stocké comme une valeur d'un octet qui est soit 0 ou 1 (et pas n'importe quelle valeur non nulle). Le permet efficace a && b
, mais dans la pratique de nombreux compilateurs C ont manqué d'optimisations .
bool booleanize(int a) { return a; } // C++
Cette fonction se compile en plusieurs instructions (sans inclure les ret
) sur la plupart des architectures. (MIPS étant une exception intéressante, ayant des instructions de comparaison dans le registre au lieu d'un registre d'indicateur / code de condition séparé). sur l'explorateur du compilateur Godbolt pour x86-64, MIPS et ARM thumb , nous pouvons voir que la version x86-64 est:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Désolé, cet exemple de ce qu'est la booléenisation est devenu un peu grand / hors sujet!