3

これに対する私の理解は次のとおりです。C では、この!演算子は、ゼロ以外の値が指定された場合は 0 を返し、0 が指定された場合はゼロ以外の値を返します。

次の小さな C コードのスニペットがあるとします。

int y = 0;
int z = !y;

にはどのような値が入りzますか? 単に!01になる必要がありますか?システム依存ですか?C標準は、何が起こるべきかを規定していますか? 今夜、ビットごとの 2 の補数の整数操作を扱う宿題をしているときに、これらの質問に出くわしました。特定の問題が発生しましたが、なぜそれが機能するのか頭を悩ませています。情報をありがとう!

4

3 に答える 3

8

C によって「生成された」真理値は、常に 0 または 1 です。

ゼロ以外の式が一般的に「真」と見なされるのは事実ですifが、言語自体が真の値を生成する必要がある場合、偽の場合は 0、真の場合は 1 を使用します。

この!演算子は論理演算子であるため、結果は常に 0 または 1 になります。

したがって、あなたの場合、z1に設定されます。

更新: 詳細については、この FAQ エントリを参照してください。これは、「生成された」という文言で私が念頭に置いていたことです。驚くべきことに、同じ語呂合わせさえあります (回答を書く前にこのエントリを調べていませんでした)。これが私がユーモアのセンスを持っていることを示しているのかどうかはわかりません.

于 2011-04-08T11:48:18.823 に答える
4

!演算子を使用した unary-expression の結果は、 intwith 値0または1です。

于 2011-04-08T11:51:21.633 に答える
3

論理否定演算子 ! の結果 オペランドの値が 0 と等しくない場合は 0、オペランドの値が 0 と等しい場合は 1 です。結果の型は int です。式 !E は (0==E) と同等です。

The C Standard (n1124) セクション 6.5.3.3 から。

于 2011-04-08T11:55:15.693 に答える