1
#include<stdio.h>
void main(){

int x,y,z;
x=y=z=1;
z=++x||++y&&++z;
printf("%d %d %d \n",x,y,z);
getch();
}

出力は211として表示されます!理由がわかりません...演算子の優先順位で行くと、これを説明することはできません。助けてください

4

5 に答える 5

6

論理or||)は、シーケンスポイントを導入します。その左側が評価されます。次に、それが0 / falseを生成した場合にのみ、右側が評価されます。

この場合、++xは2になりますので、右側は評価されません。つまり、つまり、yとしてz残ります1

于 2012-07-02T04:24:09.557 に答える
3

||オペレーターが短絡します。左側のオペランドが最初に評価され、ゼロ以外と評価された場合、右側のオペランドは計算されません。これにより、右オペランドの評価による副作用も防止されます。

于 2012-07-02T04:22:42.517 に答える
1

||を使用する場合 演算子、LHSが真であることが判明した場合、最終結果は真です。したがって、++ xを実行すると、1になり、最終結果は++ x=2およびz=1&y=1になります。

于 2012-07-02T04:23:38.230 に答える
1

ブール||短絡。つまり、真の値が見つかると、評価を停止します。したがって、z割り当てで発生するすべてのことxが増分され、zが1に設定されます。

于 2012-07-02T04:24:08.393 に答える
0

上記の回答の補遺:

C / C ++では、これらの演算子は短絡演算子、つまり'&&'、'||'です。および「?」(条件演算子)。

好意を持って、短絡評価に関するこの優れたwikiページをチェックしてください。記事の一般的な使用法のセクションをお見逃しなく。

于 2012-07-02T09:45:53.023 に答える