2016-02-16 7 views
8

私は標準を検索しましたが、上記の部分に気づいていませんでした。!0はC89で1になることが保証されていますか?

「0以外の何か」と1だけか、コンパイラに依存していますか?

+3

ビルトイン演算子は( '<', '>' '<=', '> ='、 '==' '!='、 '&&'、 '||' '!')常に正確に得'int'型の' 0'または '1'です。 'isdigit()'のような特定のライブラリ関数は、falseの場合は '0'を返し、trueの場合はゼロ以外の値を返します。 –

答えて

23

論理否定演算!の結果は、オペランドの値が0と等しい場合、結果はint型を持つオペランドの値が0に等しくない比較した場合、0です。

C89/C90、C99、C11に表示されます。

+2

あなたはこれを見つけたリンクを追加できますか? – AustinWBryan

+1

http://port70.net/~nsz/c/c89/c89-draft.html#3.3.3.3 –

+0

ありがとうございました! – susdu

4

ホッブズさんの答えによると、section 6.5.3.3.5 of the C standard!01と評価されています。

さらに、この動作は、!!xの式を使用して整数をブール値(つまり0または1のいずれか)に正規化するために使用できます。

  • 場合x = 0!!x = !!0 = !1 = 0
  • ときx!= 0!x = 0、そう!!x = !0 = 1。論理的にブール結果が得
関連する問題