2016-06-16 13 views
-2

私は0とNULLが自分自身でFALSEと評価され、負の整数または正の整数がTRUEであることがわかります。C言語でif(!( - 1))がtrueまたはfalseに評価されますか?

私の理解では、式を評価した後、そのif (-1)が、その後!オペランドはFALSEに等しいNOT TRUEを意味します適用、TRUEと評価されない操作が起こるだろうということです。これは正しい操作順序ですか、if (!(-1))FALSEと評価されますか?

+2

試しましたか? –

+0

[自分で試してみてください](http://coliru.stacked-crooked.com/a/f1471249b698860a) –

+0

最終結果だけでなく、操作の順序に関する回答も探しています。 –

答えて

4

if (!(-1))の評価は、演算子の優先順位を考えれば分かります。

最初に単項式-が1に適用され、これは整数-1を生成します。次に、この値は!によって論理的に否定されます。これは、-1を論理値に折りたたむことを含む。これはCでのルールは、整数型のために素敵でシンプルです.0は偽であり、その他は真実です。

したがって-1は真実であり、論理否定が発生したときには偽になります。

したがって、この文は移植可能にはfalseです。

+0

'! '操作は常に最後に適用されますので、順序は同じですか? –

4

標準Cでは、非ゼロ(正/負)の値はすべてTRUEです。

したがって、(-1)はTRUEと評価され、!( - 1)のコースはFALSEと評価されます。したがって、if(!( - 1))はFALSEと評価されます。

+1

詳細: "標準Cでは、ゼロ以外の(正または負の)値はすべてTRUEです。" →閉じる。様々なオブジェクトには、負、正、ゼロ、NAN、ヌルポインタ、非ヌルポインタ、コンプレックスなどの値があります。 '!'の場合、唯一の問題はその値が何であるかではなく、_が0に等しくなった場合です。 – chux

関連する問題