私は0とNULLが自分自身でFALSEと評価され、負の整数または正の整数がTRUEであることがわかります。C言語でif(!( - 1))がtrueまたはfalseに評価されますか?
私の理解では、式を評価した後、そのif (-1)
が、その後!
オペランドはFALSE
に等しいNOT TRUE
を意味します適用、TRUE
と評価されない操作が起こるだろうということです。これは正しい操作順序ですか、if (!(-1))
はFALSE
と評価されますか?
私は0とNULLが自分自身でFALSEと評価され、負の整数または正の整数がTRUEであることがわかります。C言語でif(!( - 1))がtrueまたはfalseに評価されますか?
私の理解では、式を評価した後、そのif (-1)
が、その後!
オペランドはFALSE
に等しいNOT TRUE
を意味します適用、TRUE
と評価されない操作が起こるだろうということです。これは正しい操作順序ですか、if (!(-1))
はFALSE
と評価されますか?
if (!(-1))
の評価は、演算子の優先順位を考えれば分かります。
最初に単項式-
が1に適用され、これは整数-1
を生成します。次に、この値は!
によって論理的に否定されます。これは、-1
を論理値に折りたたむことを含む。これはCでのルールは、整数型のために素敵でシンプルです.0は偽であり、その他は真実です。
したがって-1
は真実であり、論理否定が発生したときには偽になります。
したがって、この文は移植可能にはfalseです。
'! '操作は常に最後に適用されますので、順序は同じですか? –
標準Cでは、非ゼロ(正/負)の値はすべてTRUEです。
したがって、(-1)はTRUEと評価され、!( - 1)のコースはFALSEと評価されます。したがって、if(!( - 1))はFALSEと評価されます。
詳細: "標準Cでは、ゼロ以外の(正または負の)値はすべてTRUEです。" →閉じる。様々なオブジェクトには、負、正、ゼロ、NAN、ヌルポインタ、非ヌルポインタ、コンプレックスなどの値があります。 '!'の場合、唯一の問題はその値が何であるかではなく、_が0に等しくなった場合です。 – chux
試しましたか? –
[自分で試してみてください](http://coliru.stacked-crooked.com/a/f1471249b698860a) –
最終結果だけでなく、操作の順序に関する回答も探しています。 –