在C(C99之前)中,布尔值通常表示为
typedef int bool;
#define true 1
#define false 0
Run Code Online (Sandbox Code Playgroud)
为什么它被表示为'int'而不是'float'?
这是一个面试问题,即使我想知道为什么要问这样的问题!任何有说服力的答案?
bool
值主要用于比较,使用int
类型使用整数ALU进行这些比较.它非常快,因为它在CPU的正常流水线中.如果您要使用该float
类型,则必须使用浮点单元,这将需要更多周期.
此外,如果您想支持bool
在数学表达式中使用您的类型,即:
x = (4 * !!bool1) + (2 * !bool1);
Run Code Online (Sandbox Code Playgroud)
为了避免不必要的分支,使用整数ALU也会比使用浮点单元更快.
上面的代码相当于以下分支代码:
if (bool1) {
x = 4;
} else {
x = 2;
}
Run Code Online (Sandbox Code Playgroud)