为什么在 stdbool.h 中使用整数而不是无符号整数?

Why in stdbool.h are used integers and not unsigned ones?

stdbool.h中,truefalse只是简单的整数。为什么不签名?有绩效动机吗?

true 和 false 都是“#defined”到 0、1。因此,它们没有签名或未签名,只是令牌。他们将 'typed' 进行分配、比较,通常没有 运行 时间成本。

bool b = true ;
unsigned int uv = true ;
int sv = true ;

两者执行时间相同

有一次在我的一个讲座中,我的教授说 C 中的 bool 实现作为整数专门用于电子规则。 1 电流,0 无信号。所以 1-真 0 假

对值 falsetrue 使用类型 int 使它们与逻辑否定运算符 (!) 产生的类型和值集一致、关系运算符(<><=>=)、相等运算符(==!=)、逻辑与运算符 (&&) 和逻辑 OR 运算符 (||),所有这些都产生类型为 int.

的值 0 或 1

此外,如果 true 定义为 1u,则 int minust = -true; 会将 minust 初始化为实现定义的值(或引发实现定义的信号) ,而不是将 minust 初始化为值 -1。编译器可能会发出警告。这是因为 1u 的类型是 unsigned int-1u 的值是 UINT_MAX,而 UINT_MAX 不能用 int 表示。

我意识到 -true 的论点有点站不住脚。我想表达的意思是,将 falsetrue 常量定义为 unsigned int 类型,而不是纯数值 0 和 1 的类型(即 int),会对你可以用这些常量做什么施加限制(在我看来是不必要的限制)。