Mi piace "set" / "clear", ma fai attenzione all'ambiguità del tuo fraseggio. Come segnala Filip , "impostare la variabile bool" potrebbe essere interpretato come la scrittura di un valore nella variabile. Ma "impostare la bandiera" è più chiaro.
Terminologia correlata: trasformare un intero 0 / non zero in un valore 0/1 è chiamato "booleanizing" .
Se in realtà utilizzi il valore 0/1 come numero intero (anziché come vero / falso bool
), potresti voler usare quella parola. Altrimenti probabilmente si presenterà solo se stai parlando del costo delle operazioni che il compilatore deve eseguire. (Oppure se stai vettorizzando manualmente con un confronto SIMD per produrre bit tutto-zero / tutto-uno in ogni elemento vettore).
In C e C ++, un bool
può convertire implicitamente in un numero intero come 0 o 1 e nelle normali implementazioni bool
è memorizzato come valore a un byte che è 0 o 1 (non solo qualsiasi non -zero valore). La percentuale consente un efficiente a && b
, ma in pratica molti compilatori C hanno perso le ottimizzazioni .
bool booleanize(int a) { return a; } // C++
Questa funzione compila su più istruzioni (escluso ret
) sulla maggior parte delle architetture. (MIPS è un'eccezione interessante, con istruzioni di confronto in registro invece di un registro flag / condition code separato). sul explorer del compilatore Godbolt per x86-64, MIPS e pollice ARM , possiamo vedere la versione x86-64 è:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Spiacente questo esempio di ciò che la booleanizzazione è un po 'grande / fuori tema!