6

&&||などの条件式 、それらは常に 0 または 1 に評価されますか? または、真の条件の場合、1 以外の数値は可能ですか? このような変数を割り当てたいので質問しています。

int a = cond1 && cond2;

代わりに次のことを行うべきかどうか疑問に思っていました。

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

2 に答える 2

14

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

C99 §6.5.13/3:

オペランドの両方が と等しくない場合、演算子&&は結果を返します。それ以外の場合は、 になります。結果の型はです。100int

C99 §6.5.14/3:

オペランドのいずれかが と等しくない場合、演算子||は結果を返します。それ以外の場合は、 になります。結果の型はです。100int

C99 6.5.3.3/5:

論理否定演算子の結果は、!その0オペランドの値が と等しくない場合0、または1そのオペランドの値が と等しい場合0です。結果の型はintです。式 !E は (0==E) と同等です。

于 2012-07-23T17:53:25.220 に答える
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 式のオペランドは、左から右に評価されます。最初のオペランドの値が演算の結果を決定するのに十分な場合、2 番目のオペランドは評価されません。これを「短絡評価」と呼びます。最初のオペランドの後にシーケンス ポイントがあります。

ありがとう、 :)

于 2012-07-23T18:11:47.803 に答える