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表示false1表示true

  • 逻辑运算符( ==|| )将0视为false ,将其他值视为其操作数的true 。 它们还返回0false1true

比较(等式和关系)运算符( ==!=<><=>= )都返回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类型。