我隐约知道布尔运算符的返回类型在 C 中int
,但它是否保证是无味的int
,而不是,比如说,unsigned int
?
我通常担心我是否被允许否定布尔运算的结果并期望它是0
或-1
,而不是2^32 - 1
。请参阅以下示例:
int main(void) {
int a = -(5 == 5);
// Is "a" guaranteed to be -1 here?
}
比较和逻辑运算符的结果是int
类型的值0
或1
。int
指定至少保存整数范围 [−32,767, +32,767]。
因此-(5 == 5)
总是-1
,而-(5 == 4)
是0
,
然而,这样做是令人困惑的。这些运算符的结果通常以类似布尔值的方式处理,使用结果的数值可能会使理解代码变得更加困难。
使用三元运算符可以使意图更明确:
(5 == num) ? -1 : 0
在编译器资源管理器上使用许多编译器,我没有看到生成的代码有什么不同。
参见 C11 6.5.8 和 C11 6.5.9。
是的,运算符==
生成值为0
或1
的int
类型结果。