-6i
このコードの意味は何ですか?
#include<stdio.h>
int main()
{
int i = 1234;
printf("%d",-6i);
}
あなたの本当の質問に答えるに-6i
は、複雑な定数(GCC拡張)です。http://gcc.gnu.org/onlinedocs/gcc/Complex.htmlから:
複雑なデータ型で定数を記述するには、接尾辞 'i' または 'j' (どちらでも同じです) を使用します。たとえば、
2.5fi
has type_Complex float
と3i
has type_Complex int
です。このような定数は常に純粋な虚数の値を持ちますが、実数の定数に 1 を加えることで任意の複素数を形成できます。これは GNU 拡張です。ISO C99 準拠の C ライブラリ (GNU libc など) があり、浮動小数点型の複雑な定数を作成したい場合は、代わり<complex.h>
にマクロI
orを含めて使用する必要があります_Complex_I
。
したがって、i
in-6i
は変数 とは何の関係もありませんi
。ちょうどf
in の float 定数-1.0f
が という名前の変数とは何の関係もありませんf
。
フォーマット仕様は複雑な引数を処理しないため、補足として、printf("%d",-6i);
未定義の動作です。%d
GCC は、(私が知る限り) 複合型の表現について約束をしていません。それが何をするかについては、多くを語ることはできませんprintf()
。
複雑な値を出力するには、複雑な値の各コンポーネントを個別に抽出する必要があると思います (glibcprintf()
には、GCC の複雑な型を処理するフォーマット仕様拡張がないと思います)。何かのようなもの:
printf("%d %d\n",__real__ -6i, __imag__ -6i);
printf("%f %f\n",__real__ -6.i, __imag__ -6.i);
コードを少し変更すると、次のようになります。
int main(){
int i = 1234;
printf("%d",-6*i);
}
あなたは-7404
戻ってくるかもしれません。
2 番目の質問に答えるには、この質問を確認してください。