为什么没有使用float表示bool?

时间:2012-10-22 10:53:12

标签: c types boolean

在C中(在C99之前),布尔值通常表示为

typedef int bool;
#define true 1
#define false 0

为什么它被表示为'int'而不是'float'?

这是一个面试问题,即使我想知道为什么要问这样的问题! 有任何令人信服的答案吗?

4 个答案:

答案 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会限制它。您将无法使用floatfloat移动<<

您有时希望能够移动运营商的结果,例如>>&&||==!=,{{1 },><>=,C ++中的<=类型和C中的伪装! / bool(隐式地)转换为_Bool)。

答案 3 :(得分:1)

由于其他答案(慢,历史等)提到了很多原因,我想补充一点,通常浮点数有' 准确性 '问题({{3 }})。谁想让所有这些问题让计算机说“真相”或“虚假”?我希望你也不要。选择“不准确”的东西作为“布尔”值是毫无意义的。