&&の優先順位が||の優先順位よりも大きい場合、このコードは最初に--b && ++ cを評価するべきではないため、出力は1 2 4 11になります。しかし、ここでは1を与えるために短絡しているようです。 2 5 10.助けてください!
int x;
int a=1,b=5,c=10;
x=a++||--b&&++c;
printf("%d %d %d %d\n",x,a,b,c);
return 0;
&&の優先順位が||の優先順位よりも大きい場合、このコードは最初に--b && ++ cを評価するべきではないため、出力は1 2 4 11になります。しかし、ここでは1を与えるために短絡しているようです。 2 5 10.助けてください!
int x;
int a=1,b=5,c=10;
x=a++||--b&&++c;
printf("%d %d %d %d\n",x,a,b,c);
return 0;
このコードは最初に--b&&++cを評価するべきではありません
演算子の優先順位は、評価の順序に影響しません。それはただそれを意味します
a++||--b&&++c
と同等です
a++||(--b&&++c)
したがって、それa++
が最初に評価され、ステートメントを短絡させます。
の優先順位&&
は高くなります。つまり、。よりも左右の物にしっかりと結合し||
ます。その式はと同等です
a++ || (--b && ++c)
||
左側の式が0以外と評価された場合にのみ、右側のものを評価します。aはであるため、評価される1
だけで、デクリメントもインクリメントもされません。a++
b
c
はい、優先順位は高くなりますが、これはオペランドのグループ化&&
のみを決定し、評価の順序は決定しません。ここでの基本操作はです。これは、右側の操作に関係なく、左側が真の場合に右側が評価されないことを保証します。||
ここで機能している2つの概念があります
Cでは|| 演算子は結合性のままです。その結果、a++が最初に評価されます。左側がTRUEなので、コンパイラの最適化短絡すると、||の右側が確実になります。式の結果は変更されないため、評価されません。
遅延評価。
--b && ++c
まったく評価されていません。