2012-07-23 4 views
5

を含む条件式& &および||、それらは常に0または1に評価されますか?真の条件の場合、1以外の数も可能ですか?私はこのような変数を割り当てたいので頼んでいます。Cでは条件式は常に0または1と評価されますか?

int a = cond1 && cond2; 

私は次のようにしなければならないかと思いました。

int a = (cond1 && cond2)? 1:0; 
+0

実際には、あなたの主要な要件は何ですか?なぜあなたはこれらの変数を割り当てるつもりですか? –

答えて

14

論理演算子(&&||、および!)すべてが1または0のいずれかに評価されます。

C99§6.5.13/ 3:

そのオペランドの両方が0に等しくない比較する場合&&オペレータが1を得なければなりません。それ以外の場合は、0となります。結果はタイプintです。

C99§6.5.14/ 3:

そのオペランドのいずれかが0に等しくない比較する場合||オペレータが1を得なければなりません。それ以外の場合は、0となります。結果はタイプintです。

C99 6.5.3.3/5:

、そのオペランドの値と等しい場合は、そのオペランドの値が 01に等しくない比較した場合、論理否定演算 !の結果は 0ある

0。結果はタイプintです。 !Eという表現は(0 == E)と等価です。左から右へ

+0

(私は便利なC11のコピーは持っていませんが、論理演算子の仕様は変更されていません)。 –

0
'&&' 
    The logical-AND operator produces the value 1 if both operands have nonzero 
    values. If either operand is equal to 0, the result is 0. If the first operand of a 
    logical-AND operation is equal to 0, the second operand is not evaluated. 

'||' 
     The logical-OR operator performs an inclusive-OR operation on its operands. 
    The result is 0 if both operands have 0 values. If either operand has a nonzero 
    value, the result is 1. If the first operand of a logical-OR operation has a nonzero 
    value, the second operand is not evaluated. 

論理ANDおよび論理OR式のオペランドが評価されています。第1オペランドの値がオペレーションの結果を決定するのに十分である場合、第2オペランドは評価されません。これを「短絡評価」といいます。最初のオペランドの後にシーケンスポイントがあります。

ありがとう、:)

+2

これは質問に答えません。 –

関連する問題