C中“==”运算符的返回值
我可以假设在C中,如果两个值相等或者它可以评估为其他“真实”值,“==”运算符将始终求值为1吗?
struct ss { int id; }; struct os { int sid; int state; }; int count(struct ss *s, int state) { int num = 0; // foreach o (of type os*) in a hash table num += o->state == state && (s ? o->sid == s->id : 1); return num; }
那么o->sid == s->id
将始终返回1或0,还是可以返回其他值?
我可以假设在C中,如果两个值相等或者它可以评估为其他“真实”值,“==”运算符将始终求值为1吗?
是的,同样如此!=
>
<
>=
<=
所有关系运算符。
C11(ISO / IEC 9899:201x)§6.5.8 关系运算符
如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果是,则为0 false.107)结果的类型为int。
从标准:
6.5.8关系运算符
如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果是,则为0假。 结果是int类型。
6.5.9平等运营商
== (等于)和!=(不等于)运算符类似于关系运算符,除了它们的优先级较低。 如果指定的关系为真,则每个运算符产生1,如果为假,则产生0。 结果是int类型。 对于任何一对操作数,其中一个关系是正确的。
对于逻辑操作数( &&
, ||
):
6.5.13逻辑AND运算符(或6.5.14逻辑OR运算符)
如果&& (或|| )运算符的两个操作数都不等于0,则它将产生1; 否则,它产生0.结果类型为int。
你可以在这里查看最后的草稿: http : //www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
结论:
-
所有相等和关系运算符(
==
,!=
,<
,>
,<=
,>=
)返回0
表示false
,1
表示true
。 -
逻辑运算符(
==
,||
)将0
视为false
,将其他值视为其操作数的true
。 它们还返回0
为false
,1
为true
。
比较(等式和关系)运算符( ==
, !=
, <
, >
, <=
, >=
)都返回0表示false,1表示true表示,没有其他值。
逻辑运算符&&
, ||
而且!
对他们的操作不那么挑剔; 它们将0视为false,将任何非零值视为true。 但是,它们也只返回0表示false,1表示true表示。
我可以假设在C中,如果两个值相等或者它可以评估为其他“真实”值,“==”运算符将始终求值为1吗?
是的,对于符合标准的编译器,这个假设是正确的:
编程语言 – C, §6.5.9平等运算符 ( http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf ):
如果指定的关系为真,则每个运算符产生1,如果为假,则产生0。 结果是int类型。