web-dev-qa-db-ja.com

感嘆符「!」の使用Cで

私のリファレンスブックでコードを読んでいるときに、感嘆符と整数に関する問題に遭遇しました。

Numberという名前の整変数を宣言したとしましょう-int number = 0;

次に、感嘆符とnumberを含むwhile関数を使用します

while(!number)
{
    ...
}

私はこれが何であるかわからないので混乱しています!number意味し、返される可能性のある結果は何ですか?これが使えるかどうかはわかりませんが、先ほど書いたように本で見ました。

したがって、誰かが私に教えてくれれば素晴らしいです_!number意味とそれは何を評価しますか?

前もって感謝します。

12
Paul Filch

!ではない。したがって、数値がゼロ以外(正または負)の場合、ゼロを返します。ゼロの場合は1を返します。

int i = 13;
printf("i = %d, !i = %d\n", i, !i);
printf("!0 = %d\n", !(0));
11
gangadhars

Cでは、!numberは、number == 0の場合は1に評価され、number!= 0の場合は0に評価されます。Cでは、1はtrue、0はfalseです。

Number == 0のような明示的な比較を使用しても同じ効果がありますが、読みやすくなる場合があります。

6
TheWalkingCube

これは否定または「否定」演算子です。実際には、!numberは「number == 0の場合はtrue、それ以外の場合はfalse」を意味します。詳細については、Googleの「単項演算子」をご覧ください。

4
RobP

否定演算子)は、単にそのオペランドの意味を逆にするだけです。

オペランドまたは式は、算術型またはポインター型でなければなりません。ただし、式のオペランド/結果は暗黙的にデータ型boolに変換されます(ブール値0はfalse、非ゼロはTrueを意味します)。

変換されたオペランドがfalseの場合、結果はtrueです。変換されたオペランドがtrueの場合、結果はfalseです。結果はbool型です。

そう

while(!number)
{
    ...
}

変数numberは0であるので、while(!number)、つまり!0は「0の否定」であり、「TRUE」であり、コードはwhile loop()に入ります。

1
Sorcrer

数値の否定に使用されます。単項演算子です。

例えば:-

ゼロで使用している場合:-!0の場合は1になります。

1つの!1 = 0

1
Umesh