我隐约知道布尔运算符的返回类型在C语言中为int
,但是可以保证它是纯正的int
,而不是unsigned int
吗?>
我通常担心是否允许否定布尔运算的结果,并期望它是0
或-1
而不是2^32 - 1
。请参见以下示例:
int main(void) {
int a = -(5 == 5);
// Is "a" guaranteed to be -1 here?
}
我隐约知道布尔运算符的返回类型在C语言中为int
,但是可以保证它是纯正的int
,而不是unsigned int
吗?>
我通常担心是否允许否定布尔运算的结果,并期望它是0
或-1
而不是2^32 - 1
。请参见以下示例:
int main(void) {
int a = -(5 == 5);
// Is "a" guaranteed to be -1 here?
}
比较和逻辑运算符的结果是类型0
的值1
或int
。指定int
至少保留整数范围[−32,767,+32,767]。
-(5 == 5)
始终为-1
,而-(5 == 4)
为0
,
但是,这样做令人困惑。这些运算符的结果通常以类似于布尔的方式处理,并且使用结果的数值可能会使理解代码更加困难。
使用三元运算符可以使意图更清晰:
(5 == num) ? -1 : 0
在Compiler Explorer上使用了许多编译器,我发现生成的代码没有区别。
,是的,运算符==
产生类型为int
且结果值为0
或1
的结果。