30

Cでは、2つの値が等しい場合、または他の「真」の値に評価できる場合、「==」演算子は常に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 を返しますか、それとも他の値を返すことができますか?

4

4 に答える 4

40

Cでは、2つの値が等しい場合、または他の「真」の値に評価できる場合、「==」演算子は常に1に評価されると仮定できますか?

はい、!= > < >= <=すべての関係演算子もそうです。

C11(ISO/IEC 9899:201x) §6.5.8関係演算子

< (より小さい)、> (より大きい)、<= (より小さいか等しい)、および >= (より大きいか等しい) の各演算子は、指定された関係が真の場合は 1 を返し、そうでない場合は 0 を返します。 false.107) 結果の型は int です。

于 2013-08-07T08:08:40.433 に答える
10

比較 (等値および関係) 演算子 ( ==!=<><=>=) はすべて、false の場合は 0、true の場合は 1 を返します。それ以外の値は返しません。

論理演算子&&、 、||および!は、オペランドについてそれほどうるさくありません。0 を false として扱い、ゼロ以外の値を true として扱います。ただし、false の場合は 0、true の場合は 1 のみを返します。

于 2013-08-07T08:09:23.533 に答える
2

Cでは、2つの値が等しい場合、または他の「真」の値に評価できる場合、「==」演算子は常に1に評価されると仮定できますか?

はい、標準準拠のコンパイラの場合、この仮定は正しいです。

プログラミング言語 — C、§6.5.9 等価演算子( http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf ):

各演算子は、指定されたリレーションが true の場合は 1 を返し、false の場合は 0 を返します。結果は int 型です。

于 2013-08-07T08:09:55.010 に答える