Мені подобається "встановити" / "зрозуміло", але будьте уважні до двозначності у вашому формулюванні. Як зазначає Філіп , "встановити змінну bool" можна вважати записом певної величини до змінної. Але «встановлення прапора» більш зрозуміле.
Пов'язана термінологія: перетворення 0 / ненульового цілого числа у значення 0/1 називається "булеанізуючим" .
Якщо ви фактично використовуєте значення 0/1 як ціле число (замість як істинне / хибне bool
), ви можете використовувати це слово. Інакше він з’явиться, лише якщо ви говорите про вартість операцій, які повинен виконати компілятор. (Або якщо ви векторизуєте вручну за допомогою SIMD порівняння, щоб отримати всі нулі / всі-один біт у кожному векторному елементі).
У C і C ++ a bool
може неявно перетворюватися назад у ціле число як 0 або 1, а в звичайних реалізаціях bool
зберігається як однобайтове значення, яке дорівнює 0 або 1 (а не будь-яке ненульове значення). Це дозволяє ефективно a && b
, але на практиці багато компіляторів С пропустили оптимізацію .
bool booleanize(int a) { return a; } // C++
Ця функція компілюється в декілька інструкцій (не включаючи ret
) для більшості архітектур. (MIPS є цікавим винятком, маючи інструкції порівняння-реєстру замість окремого регістра прапор / код-код). на досліднику компілятора Godbolt для x86-64, MIPS і ARM ми бачимо, що версія x86-64:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Вибачте за цей приклад того, що booleaising має трохи великий / поза темою!