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

Shr*_*hri 3 c types boolean

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

typedef int bool;
#define true 1
#define false 0
Run Code Online (Sandbox Code Playgroud)

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

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

K. *_*ord 6

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)

  • 就是说,如果`bool`是一个整数类型,其值为0或1,因为它只是从逻辑表达式的结果中赋值的,则不可能发生溢出。因此,这取决于您的价值观的来源。添加!!会做更多工作来验证输入。每个人可能确切地有不同的看法,什么时候可以/应该为了优化目的而删除这些工作,但是*如果*您正在编写巧妙的代码来避免分支,*并且*您信任该值的来源,那么我就说离开出来。 (2认同)