在 C(C99 之前)中,布尔值通常表示为
typedef int bool;
#define true 1
#define false 0
为什么它表示为“int”而不是“float”?
这是一个面试问题,我什至想知道为什么会问这样的问题!有什么令人信服的答案吗?
bool
值主要用于比较,并且使用int
类型使用整数 ALU进行这些比较。它非常快,因为它在 CPU 的正常管道中。如果要使用该float
类型,则必须使用浮点单元,这将花费更多周期。
此外,如果您想支持bool
在数学表达式中使用您的类型,即:
x = (4 * !!bool1) + (2 * !bool1);
为了避免不必要的分支,您使用整数 ALU 也会比使用浮点单元更快。
上面的代码等价于下面的分支代码:
if (bool1) {
x = 4;
} else {
x = 2;
}
有很多原因表明这将是一个坏主意。但是没有这样做的原因,即没有这样做的历史原因是,早期的计算机没有浮点单元(并且在更长的时间内有些有,有些没有)。
C's _Bool
/ bool
(和 C++'s bool
)应该是一种非常简单的数值类型,并且表现得像一个,你不能得到比char
or更简单的东西int
。
int
是出于性能或历史原因的典型选择。
替代float
会限制它。您将无法float
使用<<
and移动 a >>
。
有时您希望能够转换运算符的结果,例如&&
, ||
, ==
, !=
, >
, <
, >=
, <=
, ,这些运算符在 C++!
中属于类型,在 C 中变相/ (隐式转换为)。bool
_Bool
bool
int
由于其他答案(缓慢、历史等)提到了许多原因,我想补充一点,通常浮点数存在“准确性”问题(参考:维基百科)。谁希望所有这些问题让计算机说出“真相”或“虚假”?我希望你也不要。选择“不准确”的东西用作“布尔”值是没有意义的。