0
int i = 5, j = 10, k = 1;  
printf("%d\n", k > i < j);

なぜ1を印刷するのですか?

4

3 に答える 3

2

うまくいけば、それは違法であるべきであるのと同じくらい紛らわしいものとして、何も印刷しないでしょう。ただし、絶対にやらなければならない場合は、次のようにします。

k > i < jは2つの部分に分解されます。k > i次に、その結​​果がと比較されjます。このような比較の結果は、の場合は1、の場合はtrue0ですfalse。なので、0になりますk > ifalseしたがって、 10 < jtrue得られます。したがって、これは1を出力します。

于 2012-11-10T03:55:09.417 に答える
1

まず、操作が評価される順序を把握する必要があります。ヘルプについては、この表の関連性の列を使用してください。次に、の値を把握しますk > iprintf試してみてください。最後に、最後の式の値を計算し、プログラムを実行して、答えが正しいかどうかを確認します。

于 2012-11-10T03:54:25.987 に答える
1

k > i < jprintfは式であり、呼び出される前に完全に評価されます。printf評価の結果だけが表示されます。評価対象については、演算子は右から左に個別に評価されます。したがって、最初に評価され、次に右側のwithにk > i適用された結果が続きます。<j

<and以外の演算子がある場合は、これが異なる可能性があることに注意してください>。それらはたまたま同じレベルの優先順位を持っているので、常に左から右に評価されます。一方、私たちが持っていた場合、k + i * j最初i * jに評価されます。これは*、がよりも優先順位が高いためです+

于 2012-11-10T03:54:34.017 に答える