c语言 - 否定 &&(逻辑和)操作的结果是否安全?



我隐约知道布尔运算符的返回类型在 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类型的值01int指定至少保存整数范围 [−32,767, +32,767]。

因此-(5 == 5)总是-1,而-(5 == 4)0

然而,这样做是令人困惑的。这些运算符的结果通常以类似布尔值的方式处理,使用结果的数值可能会使理解代码变得更加困难。

使用三元运算符可以使意图更明确:

(5 == num) ? -1 : 0

在编译器资源管理器上使用许多编译器,我没有看到生成的代码有什么不同。

参见 C11 6.5.8 和 C11 6.5.9。

是的,运算符==生成值为01int类型结果。

相关内容

  • 没有找到相关文章

最新更新