否定 &&(逻辑与)运算的结果是否安全?
Is it safe to negate the result of an && (logical and) operation?
我隐约知道布尔运算符的return类型在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
在 Compiler Explorer 上使用了多个编译器,我没有发现生成的代码有什么不同。
是的,运算符 ==
产生类型 int
的结果,值为 0
或 1
.
我隐约知道布尔运算符的return类型在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
在 Compiler Explorer 上使用了多个编译器,我没有发现生成的代码有什么不同。
是的,运算符 ==
产生类型 int
的结果,值为 0
或 1
.