C中"=="运算符的返回值

Vic*_*don 25 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;
}
Run Code Online (Sandbox Code Playgroud)

那么o->sid == s->id总是返回1或0,还是可以返回其他值?

Yu *_*Hao 36

我可以假设在C中,如果两个值相等或者它可以评估为其他"真实"值,"=="运算符将始终求值为1吗?

是的,!= > < >= <=所有关系运营商也是如此.

C11(ISO/IEC 9899:201x)§6.5.8 关系运算符

如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果是,则为0 false.107)结果的类型为int.


Pie*_*aud 10

从标准:

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

结论:

  • 所有平等,关系运算符(==,!=,<,>,<=,>=)回报0false1true.

  • 的逻辑运算符(==,||,!)治疗0false和其它值true用于它们的操作数.他们还返回0作为false1作为true.


Jon*_*ler 9

比较(平等关系)运算符(==,!=,<,>,<=,>=)所有的假,1为真返回0 -并没有其他价值.

逻辑运算符&&,||并且!对自己的操作数少挑剔; 他们将0视为假,将任何非零值视为真.但是,它们也仅返回0表示false,1表示true表示.