Eu gosto de "set" / "clear", mas tenha cuidado com a ambiguidade no seu fraseado. Como Filip destaca , "definir a variável bool" pode significar escrever algum valor para a variável. Mas "definir a bandeira" é mais claro.
Terminologia relacionada: transformar um número 0 / diferente de zero em um valor 0/1 é chamado "booleanizing" .
Se você realmente usar o valor 0/1 como um número inteiro (em vez de verdadeiro / falso bool
), convém usar essa palavra. Caso contrário, provavelmente só surgirá se você estiver falando sobre o custo das operações que o compilador deve executar. (Ou se você estiver vetorizando manualmente com um SIMD compare para produzir todos os bits zero / todos um em cada elemento do vetor).
Em C e C ++, a bool
pode implicitamente converter novamente em um número inteiro como 0 ou 1, e em implementações normais bool
é armazenado como um valor de um byte que é 0 ou 1 (não apenas qualquer valor diferente de zero). O permite eficiente a && b
, mas na prática muitos compiladores C perderam otimizações .
bool booleanize(int a) { return a; } // C++
Essa função é compilada para várias instruções (não incluindo a ret
) na maioria das arquiteturas. (MIPS é uma exceção interessante, tendo instruções de comparação em registro em vez de um registro de sinalizador / código de condição separado). no Godbolt compiler explorer para x86-64, MIPS e ARM thumb , podemos ver que a versão x86-64 é:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Desculpe este exemplo do que a booleanização é um pouco grande / fora de tópico!