首页 > 解决方案 > 否定 && (逻辑与)操作的结果是否安全?

问题描述

我隐约知道布尔运算符的返回类型int在 C 中,但它是否保证是 unflavored int,而不是,比如说,unsigned int

我通常担心是否允许我否定布尔运算的结果并期望它是0or-1和 not 2^32 - 1。请参见以下示例:

int main(void) {
    int a = -(5 == 5);
    // Is "a" guaranteed to be -1 here?
}

标签: clogical-operatorsreturn-type

解决方案


比较和逻辑运算符的结果是值0or1类型intint被指定为至少保存整数范围 [−32,767, +32,767]。

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

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

使用三元运算符可以使意图更清晰:

(5 == num) ? -1 : 0

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


推荐阅读