-1
#include<stdio.h>
void main()
{
 int i = 10;
 i=!i>14;
 printf("i=%d",i);
}

出力を取得します: i=0 i値を他の整数
に変更しても、同じ出力が得られます。 このコードは何をしますか? 説明してください

4

6 に答える 6

5

この行

i=!i>14;

括弧で囲まれています (暗黙的に)

i= (!i) > 14;

a の結果!は常に 0 (if i != 0) または 1 (if i == 0) であるため、結果は常に 14 より小さくなります。

あなたのprintf電話

printf("i=%d");

各変換指定子は正しい型の対応する引数を持たなければならないため、未定義の動作を引き起こす 2 番目の引数がありません (見つけてくれた @DSM に感謝します)。

于 2012-09-26T19:03:54.450 に答える
3

このステートメント:式の結果をi = !i > 14変数に割り当てます: 。i!i > 14

(!i) > 14はゼロ以外の数値に対してゼロであるため、偽ですfalseは Cではで表されるため、値 を取得します。!i0 > 140i0

また、あなたの呼び出しには、フォーマット文字列にprintf一致する引数がありません。%d次のprintfようにする必要があります。printf(i=%d\n", i);

于 2012-09-26T19:04:01.813 に答える
3

また、呼び出しは形式を指定するだけですが、引数としてprintf欠落しています。i

于 2012-09-26T19:06:38.857 に答える
2

他の回答を補足するために:

次の行にエラーがあります。

printf("i=%d");

そのはず:

printf("i=%d",i);
于 2012-09-26T19:07:40.567 に答える
1

優先順位規則により、その行は次のようになります。

i = (!i)>14;

したがって、i10 は!演算子にとって真です。!これを否定し、false、つまり 0 を与えると、得られるのは です0>14。これは明らかに false、つまり 0 です。

于 2012-09-26T19:05:44.200 に答える
1

私はあなたがこれを望んでいたと思います i=!(i>14); あなたが書いたロジックは、左から右に完全に解決されます。最初は not(i) であり、その結果は 14 に対してより大きいかどうかテストされます。

于 2012-09-26T19:08:52.060 に答える