int i = 5, j = 10, k = 1;
printf("%d\n", k > i < j);
なぜ1を印刷するのですか?
うまくいけば、それは違法であるべきであるのと同じくらい紛らわしいものとして、何も印刷しないでしょう。ただし、絶対にやらなければならない場合は、次のようにします。
k > i < j
は2つの部分に分解されます。k > i
次に、その結果がと比較されj
ます。このような比較の結果は、の場合は1、の場合はtrue
0ですfalse
。なので、0になりますk > i
。false
したがって、 10 < j
がtrue
得られます。したがって、これは1を出力します。
まず、操作が評価される順序を把握する必要があります。ヘルプについては、この表の関連性の列を使用してください。次に、の値を把握しますk > i
。printf
試してみてください。最後に、最後の式の値を計算し、プログラムを実行して、答えが正しいかどうかを確認します。
k > i < j
printf
は式であり、呼び出される前に完全に評価されます。printf
評価の結果だけが表示されます。評価対象については、演算子は右から左に個別に評価されます。したがって、最初に評価され、次に右側のwithにk > i
適用された結果が続きます。<
j
<
and以外の演算子がある場合は、これが異なる可能性があることに注意してください>
。それらはたまたま同じレベルの優先順位を持っているので、常に左から右に評価されます。一方、私たちが持っていた場合、k + i * j
最初i * j
に評価されます。これは*
、がよりも優先順位が高いためです+
。