#include<stdio.h>
void main()
{
int i = 10;
i=!i>14;
printf("i=%d",i);
}
出力を取得します: i=0 iの値を他の整数
に変更しても、同じ出力が得られます。
このコードは何をしますか? 説明してください
#include<stdio.h>
void main()
{
int i = 10;
i=!i>14;
printf("i=%d",i);
}
出力を取得します: i=0 iの値を他の整数
に変更しても、同じ出力が得られます。
このコードは何をしますか? 説明してください
この行
i=!i>14;
括弧で囲まれています (暗黙的に)
i= (!i) > 14;
a の結果!
は常に 0 (if i != 0
) または 1 (if i == 0
) であるため、結果は常に 14 より小さくなります。
あなたのprintf
電話
printf("i=%d");
各変換指定子は正しい型の対応する引数を持たなければならないため、未定義の動作を引き起こす 2 番目の引数がありません (見つけてくれた @DSM に感謝します)。
このステートメント:式の結果をi = !i > 14
変数に割り当てます: 。i
!i > 14
(!i) > 14
はゼロ以外の数値に対してゼロであるため、偽です。falseは Cではで表されるため、値 を取得します。!i
0 > 14
0
i
0
また、あなたの呼び出しには、フォーマット文字列にprintf
一致する引数がありません。%d
次のprintf
ようにする必要があります。printf(i=%d\n", i);
また、呼び出しは形式を指定するだけですが、引数としてprintf
欠落しています。i
他の回答を補足するために:
次の行にエラーがあります。
printf("i=%d");
そのはず:
printf("i=%d",i);
優先順位規則により、その行は次のようになります。
i = (!i)>14;
したがって、i
10 は!
演算子にとって真です。!
これを否定し、false、つまり 0 を与えると、得られるのは です0>14
。これは明らかに false、つまり 0 です。
私はあなたがこれを望んでいたと思います i=!(i>14); あなたが書いたロジックは、左から右に完全に解決されます。最初は not(i) であり、その結果は 14 に対してより大きいかどうかテストされます。