3

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

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

为什么它表示为“int”而不是“float”?

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

4

4 回答 4

6

bool值主要用于比较,并且使用int类型使用整数 ALU进行这些比较。它非常快,因为它在 CPU 的正常管道中。如果要使用该float类型,则必须使用浮点单元,这将花费更多周期。

此外,如果您想支持bool在数学表达式中使用您的类型,即:

x = (4 * !!bool1) + (2 * !bool1);

为了避免不必要的分支,您使用整数 ALU 也会比使用浮点单元更快。

上面的代码等价于下面的分支代码:

if (bool1) {
   x = 4;
} else {
   x = 2;
}
于 2012-10-22T10:58:36.003 回答
2

有很多原因表明这将是一个坏主意。但是没有这样做的原因,即没有这样做的历史原因是,早期的计算机没有浮点单元(并且在更长的时间内有些有,有些没有)。

于 2012-10-22T10:56:26.840 回答
1

C's _Bool/ bool(和 C++'s bool)应该是一种非常简单的数值类型,并且表现得像一个,你不能得到比charor更简单的东西int

int是出于性能或历史原因的典型选择。

替代float会限制它。您将无法float使用<<and移动 a >>

有时您希望能够转换运算符的结果,例如&&, ||, ==, !=, >, <, >=, <=, ,这些运算符在 C++!中属于类型,在 C 中变相/ (隐式转换为)。bool_Boolboolint

于 2012-10-22T11:17:39.800 回答
1

由于其他答案(缓慢、历史等)提到了许多原因,我想补充一点,通常浮点数存在“准确性”问题(参考:维基百科)。谁希望所有这些问题让计算机说出“真相”或“虚假”?我希望你也不要。选择“不准确”的东西用作“布尔”值是没有意义的。

于 2012-10-22T11:24:33.293 回答