我可以假设在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
结论:
所有平等,关系运算符(==,!=,<,>,<=,>=)回报0为false和1的true.
的逻辑运算符(==,||,!)治疗0如false和其它值true用于它们的操作数.他们还返回0作为false和1作为true.
比较(平等关系)运算符(==,!=,<,>,<=,>=)所有的假,1为真返回0 -并没有其他价值.
逻辑运算符&&,||并且!对自己的操作数少挑剔; 他们将0视为假,将任何非零值视为真.但是,它们也仅返回0表示false,1表示true表示.