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