Me gusta "set" / "clear", pero tenga cuidado con la ambigüedad en su fraseo. Como señala Filip , "establecer la variable bool" podría significar escribir algún valor en la variable. Pero "poner la bandera" es más claro.
Terminología relacionada: convertir un entero 0 / distinto de cero en un valor 0/1 se denomina "booleanizing" .
Si realmente usa el valor 0/1 como un entero (en lugar de un verdadero / falso bool
), es posible que desee usar esa palabra. De lo contrario, probablemente solo aparecerá si está hablando del costo de las operaciones que el compilador debe realizar. (O si está vectorizando manualmente con un SIMD, compare para producir bits todo cero / todo uno en cada elemento vectorial).
En C y C ++, a bool
puede implícitamente volver a convertirse en un entero como 0 o 1, y en implementaciones normales bool
se almacena como un valor de un byte que es 0 o 1 (no cualquier valor distinto de cero). Esto permite la eficiencia a && b
, pero en la práctica muchos compiladores de C han perdido las optimizaciones .
bool booleanize(int a) { return a; } // C++
Esa función se compila con múltiples instrucciones (sin incluir ret
) en la mayoría de las arquitecturas. (MIPS es una excepción interesante, ya que tiene instrucciones de comparar en registro en lugar de un registro de código de condición / indicador separado). en el explorador del compilador Godbolt para x86-64, MIPS y Thumb ARM , podemos ver que la versión x86-64 es:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Lo siento, este ejemplo de qué booleanizar es un poco grande / fuera de tema.