否定&&(逻辑与)运算的结果是否安全?

我隐约知道布尔运算符的返回类型在C语言中为int,但是可以保证它是纯正的int,而不是unsigned int吗?>

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

int main(void) {
    int a = -(5 == 5);
    // Is "a" guaranteed to be -1 here?
}
cmsad 回答:否定&&(逻辑与)运算的结果是否安全?

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

-(5 == 5)始终为-1,而-(5 == 4)0

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

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

(5 == num) ? -1 : 0

Compiler Explorer上使用了许多编译器,我发现生成的代码没有区别。

,

请参见C11 6.5.8C11 6.5.9

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

本文链接:https://www.f2er.com/2953084.html

大家都在问