&&や||などの条件式 、それらは常に 0 または 1 に評価されますか? または、真の条件の場合、1 以外の数値は可能ですか? このような変数を割り当てたいので質問しています。
int a = cond1 && cond2;
代わりに次のことを行うべきかどうか疑問に思っていました。
int a = (cond1 && cond2)? 1:0;
&&や||などの条件式 、それらは常に 0 または 1 に評価されますか? または、真の条件の場合、1 以外の数値は可能ですか? このような変数を割り当てたいので質問しています。
int a = cond1 && cond2;
代わりに次のことを行うべきかどうか疑問に思っていました。
int a = (cond1 && cond2)? 1:0;
論理演算子 ( &&
、||
、および) はすべて、 または のいずれか!
に評価されます。1
0
C99 §6.5.13/3:
オペランドの両方が と等しくない場合、演算子
&&
は結果を返します。それ以外の場合は、 になります。結果の型はです。1
0
0
int
C99 §6.5.14/3:
オペランドのいずれかが と等しくない場合、演算子
||
は結果を返します。それ以外の場合は、 になります。結果の型はです。1
0
0
int
C99 6.5.3.3/5:
論理否定演算子の結果は、
!
その0
オペランドの値が と等しくない場合0
、または1
そのオペランドの値が と等しい場合0
です。結果の型はint
です。式 !E は (0==E) と同等です。
'&&'
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 番目のオペランドは評価されません。これを「短絡評価」と呼びます。最初のオペランドの後にシーケンス ポイントがあります。
ありがとう、 :)